2010-10-19 3 views
1

У меня есть интерфейс, который определяет некоторые методы, и у меня есть N классов, которые его реализуют. Как я могу зарегистрировать все классы, найденные во всех загруженных сборках, с помощью autofac?Autofac - Регистрация плагинов

ответ

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) 
     { 
      ... 
     } 
    } 
} 
+0

может вам напишите мне, как я могу написать расширяемый класс отладки, который я мог бы динамически регистрировать с помощью autofac? следует ли использовать модули? Зачем? – Stefano

+0

@Stefano - серьезно, этот вопрос не имел никакого смысла. Связано ли это с этой нитью? если нет, создайте новый вопрос и попытайтесь объяснить, в чем проблема. Я не могу и не буду давать вам «код» без понятной проблемы/сценария. –

+0

, так что это действительно просто ... У меня есть N классов, которые реализуют один и тот же интерфейс, и эти классы находятся в разных сборках ... поэтому я регистрирую все классы, найденные с помощью вашего метода, но я не знаю названия класса, поэтому как могу я их назвать? – Stefano