Правильное использование инъекций зависимостей - PullRequest
3 голосов
/ 06 марта 2012

Я использую Autofac для реализации IoC в своем решении, но я сомневаюсь, правильно ли я это делаю или нет.Вот сценарий:
У меня есть несколько Manager классов, которые все происходят от BaseManager класса.BaseManager имеет поле protected User CurrentUser.Я пытаюсь разрешить CurrentUser с помощью Autofac.Я написал интерфейс IUserProvider и реализовал несколько классов (например, WebUserProvider и WinformsUserProvider).
Затем я зарегистрировал своего провайдера, как показано ниже (например, в Global.asax):

builder.Register(c => new WebUserProvider(...)).As<IUserProvider>();  
  • Как я могу разрешить зависимости (доступ container в моих классах)? Я мог бы использовать шаблон синглтона или локатора службы, но кажется, что это анти-шаблон . Так как я долженразрешить мою зависимость?

1 Ответ

5 голосов
/ 06 марта 2012

Для меня это звучит как переобучение.Зачем вам класс base manager , который знает пользователя?Наличие нескольких управляющих классов - это запах кода и опасность для обслуживания сама по себе, поскольку вы слишком много абстрагируетесь.Вам действительно это нужно?

Как мне разрешить зависимости (контейнер доступа в моих классах)?

Вы не должны искатьспособ получить доступ к вашему контейнеру.Контейнер должен быть инициализирован один раз, в одном месте.Вы должны внедрить все зависимости через конструктор.Эти зависимости передаются из корня графа зависимостей, используя container.Resolve<T>, и в других местах графа зависимостей, используя внедрение конструктора (или некоторые люди используют внедрение свойства).

...