这是一个关于如何最好地进行DI(依赖注入)的问题,因此它不与任何特定的DI/IoC框架相关,因为嘛,框架应该基于模式和实践而选择,而不是相反,对吧?
我正在做一个项目,其中repository必须被注入到services中,一个service可能需要多个repositories,我很想知道以下方法之间的优缺点:
我正在做一个项目,其中repository必须被注入到services中,一个service可能需要多个repositories,我很想知道以下方法之间的优缺点:
Inject repositories in service constructor
public class SomeService : ISomeService { private IRepository1 repository1; private IRepository2 repository2; public SomeService(IRepository1 repository1, IRepository2 repository2) { this.repository1 = repository1; this.repository2 = repository2; } public void DoThis() { //Do something with repository1 } public void DoThat() { //Do something with both repository1 and repository2 } }
Inject a custom context class that include everything any service may need but lazy instantiated (the IServiceContext will be a protected field in BaseService)
public class SomeService : BaseService, ISomeService { public SomeService(IServiceContext serviceContext) { this.serviceContext= serviceContext; } public void DoThis() { //Do something with serviceContext.repository1 } public void DoThat() { //Do something with both serviceContext.repository1 and serviceContext.repository2 } }
Inject into methods that need them only
public class SomeService : ISomeService { public void DoThis(IRepository1 repository1) { //Do something with repository1 } public void DoThat(IRepository1 repository1, IRepository2 repository2) { //Do something with both repository1 and repository2 } }
希望您能提供一些指导,此外在评估类似这样的备选方案时应考虑哪些方面?