Unity Container Config вопрос - PullRequest
       14

Unity Container Config вопрос

2 голосов
/ 17 сентября 2009

Я использую контейнер Unity DI. В файле конфигурации я указываю следующий тип как:

<type type="Interfaces.ILogger,Interfaces" 
 mapTo = "ConcreateClasses.ConsoleLogger,ConcreateClasses" />

Насколько я понимаю, для того, чтобы это работало, в моем проекте должны быть ссылки на интерфейсы dll и ConcreteClasses dll.

Но я хочу не ссылаться на конкретные классы реализации во время разработки. Я хотел бы, чтобы они были загружены во время выполнения, указав путь к библиотеке ConcreteClasses.

Есть ли способ сделать это?

Спасибо

Ответы [ 2 ]

3 голосов
/ 17 сентября 2009

Вам не нужно ссылаться на конкретную сборку реализации в вашем проекте, вам нужно только, чтобы она находилась в той же папке, что и ваш файл конфигурации, или была доступна в GAC.

Это CONVENIENT для ссылки на другую сборку с конкретной реализацией, так что Visual Studio поместит копию DLL в результирующую папку BIN вашего проекта, что сделает поиск тривиальным.

1 голос
/ 17 сентября 2009

Вы можете сделать это с помощью отражения:

Assembly a = Assembly.LoadFrom("pathToDll");
Type interfaceType = typeof(Interfaces.ILogger);
Type implementingType = a.GetTypes.Where(t => t.IsAssignableTo(interfaceType)).First(); //add any other constraints to decide mapping

container.RegisterType(interfaceType, implementingType);
...