Я действительно разбираюсь в 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 требует, чтобы у моего пользовательского провайдера был конструктор без параметров, что вынуждает меня использовать локатор служб для внедрения репозитория, который он использует внутри.