UnityContainer - как зарегистрироваться / разрешить с цепочкой зависимостей - PullRequest
1 голос
/ 19 мая 2011

У меня есть приложение MVC с Controller, которое занимает IDomainService.Конструктор класса DomainService принимает IRepository, а конструктору класса Repository требуется строка подключения.

У меня есть что-то вроде этого:

string connectionString = ConfigurationManager
    .ConnectionStrings["ApplicationServices"].ConnectionString;

c.RegisterInstance("ConnectionString", connectionString);

c.RegisterType<IDepartmentRepository, DepartmentRepository>(
    "DepartmentRepository", 
    new InjectionConstructor(connectionString));

c.RegisterType<IDepartmentDomainService, DepartmentService>(
    new InjectionConstructor(
        new ResolvedParameter<IDepartmentRepository>(
            "DepartmentRepository")));

Однако это не такработа.

Я что-то не так делаю?У меня нет проблем с внедрением репозитория, но я не могу заставить работать мою доменную службу (вместе с репозиторием).

Спасибо.

1 Ответ

6 голосов
/ 19 мая 2011

Я обычно добавляю небольшой класс для этого:

public class AppConfigConnectionFactory : IConnectionFactory
{
   public IDbConnection Create() 
   { 
        return new SqlConnection(ConfigurationManager
             .ConnectionStrings["ApplicationServices"].ConnectionString);
   }
}

c.RegisterType<IConnectionFactory, AppConfigConnectionFactory>();
c.RegisterType<IDepartmentRepository, DepartmentRepository>();

Не зависит от строк, если вам не нужно.И с этим решением вы также избежите некоторого дублирования кода в каждом хранилище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...