我真的进入了 DI/IoC 的事情——它让一些事情变得容易多了。但是,我有一些继承的类实现了一个具有所需的无参数构造函数的类,因此我使用服务定位器来获得我想要的:
MyMembershipProivder() : MyMembershipProvider(ServiceLocator.Current.GetInstance<...>){}
MyMembershipProivder(IMemberRepo memberRepo){...}
完美运行。但是,由于我也在使用 MVC3 DependencyResolver,我发现自己别无他法,只能这样做:
var locator = new NinjectServiceLocator(kernel);
DependencyResolver.SetResolver(locator);
ServiceLocator.SetLocatorProvider(() => locator);
DependencyResolver 在 MVC 应用程序中使用,ServiceLocator 在各种类库中使用。
这是执行此操作的理想方法吗?我错过了什么吗?
更新
在上面的示例中,该类是一个自定义的 asp.net 成员资格提供程序。asp.net 成员提供程序工厂要求我的自定义提供程序具有无参数构造函数,这迫使我使用服务定位器来注入它在内部使用的存储库。