Autofac - Регистрация плагинов - PullRequest
1 голос
/ 19 октября 2010

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

1 Ответ

1 голос
/ 21 октября 2010

Вам нужно будет «знать» о сборках, содержащих классы, возможно, вы можете загрузить их самостоятельно с помощью Assembly.Load(..).

Оттуда легко зарегистрировать классы:

var assemblies = new[]{....};

builder.RegisterAssemblyTypes(assemblies) 
            .Where(t => typeof(IMyInterface).IsAssignableFrom(t)) 
            .As<IMyInterface>(); 

Обновление: для доступа к зарегистрированным экземплярам вы можете использовать встроенную поддержку Autofac для коллекций:

public class MyService
{
    private readonly IEnumerable<IMyInterface> _services;
    public MyService(IEnumerable<IMyInterface> services)
    {
        _services = services;
    }

    public void DoStuffWithServices()
    {
        foreach(var svc in _services)
        {
           ...
        }
    }
}
...