У меня есть интерфейс, который определяет некоторые методы, и у меня есть N классов, которые его реализуют. Как я могу зарегистрировать все классы, найденные во всех загруженных сборках, с помощью autofac?Autofac - Регистрация плагинов
1
A
ответ
1
Вам нужно «знать о» собраниях, содержащих классы, вы можете загрузить их самостоятельно с помощью Assembly.Load(..)
.
Оттуда легко зарегистрировать классы:
var assemblies = new[]{....};
builder.RegisterAssemblyTypes(assemblies)
.Where(t => typeof(IMyInterface).IsAssignableFrom(t))
.As<IMyInterface>();
Update:, чтобы добраться до зарегистрированных случаев, вы можете использовать Autofac встроенную поддержку для коллекций:
public class MyService
{
private readonly IEnumerable<IMyInterface> _services;
public MyService(IEnumerable<IMyInterface> services)
{
_services = services;
}
public void DoStuffWithServices()
{
foreach(var svc in _services)
{
...
}
}
}
может вам напишите мне, как я могу написать расширяемый класс отладки, который я мог бы динамически регистрировать с помощью autofac? следует ли использовать модули? Зачем? – Stefano
@Stefano - серьезно, этот вопрос не имел никакого смысла. Связано ли это с этой нитью? если нет, создайте новый вопрос и попытайтесь объяснить, в чем проблема. Я не могу и не буду давать вам «код» без понятной проблемы/сценария. –
, так что это действительно просто ... У меня есть N классов, которые реализуют один и тот же интерфейс, и эти классы находятся в разных сборках ... поэтому я регистрирую все классы, найденные с помощью вашего метода, но я не знаю названия класса, поэтому как могу я их назвать? – Stefano