Имея решение с двумя проектами, я столкнулся с проблемой DI. Решение состоит из библиотеки классов и приложения WebApi2 (которое использует библиотеку классов и предоставляет API).
Я определил Autofac.module в библиотеке классов, который устанавливает все DI в проекте.
В проекте WebApi2 я создаю контейнер DI (используя Autofac.WebApi2) и загружаю модуль из библиотеки классов. Теперь, когда контроллеры API в проекте WepApi2 запрашивают службы в библиотеке классов, они создаются со всеми своими зависимостями, все это прекрасно работает!
Проблема в том, что теперь мне в библиотеке классов нужно создать экземпляр некоторых классов из строки (которая в конечном итоге поступает из БД), насколько я знаю, единственный способ сделать это с помощью отражения, поэтому я делаю так:
var ruleType = Type.GetType(rule.RuleImplementation.Implementation);
var rule = (IRule)Activator.CreateInstance(ruleType,param1,param2);
Проблема в том, что класс, реализующий интерфейс IRule, также имеет зависимости, которые необходимо разрешить, и это то, что заставило меня какое-то время стучать по клавиатуре.
Можно ли каким-то образом использовать отражение и autoFac вместе для создания экземпляров объектов? Мне все еще нужно иметь возможность передавать свои параметры в объект.
... Или есть способ как-то получить доступ к контейнеру (который был создан в сборке webApi2) и использовать его для его разрешения? Я предполагаю, что это будет своего рода шаблон обслуживания, который, как я считаю, считается анти-шаблоном.
Как мне поступить? Весь вклад очень ценится.