Допустим, вы работаете над проектом ASP.NET MVC, и это слои, разделенные на разные проекты в одном решении. В каждом проекте есть модули autofac, созданные для связывания зависимостей. Теперь я хотел бы отсканировать сборки и зарегистрировать все модули в контейнере.
Я адаптировал метод расширения, аналогичный представленному здесь http://goo.gl/VJEct
public static void RegisterAssemblyModules(this ContainerBuilder builder, Assembly
assembly)
{
var scanningBuilder = new ContainerBuilder();
scanningBuilder.RegisterAssemblyTypes(assembly)
.Where(t => typeof(IModule).IsAssignableFrom(t))
.As<IModule>();
using (var scanningContainer = scanningBuilder.Build())
{
foreach (var m in scanningContainer.Resolve<IEnumerable<IModule>>())
builder.RegisterModule(module);
}
}
Мой первый вопрос, учитывая, что этот образец был предоставлен несколько лет назад, можно ли использовать эту конструкцию с текущими версиями autofac?
Во-вторых, приложение MVC зависит от функциональности на других уровнях, что означает, что иногда мне нужно регистрировать типы с помощью .InstancePerHttpRequest (). Однако я также хотел бы иметь возможность ссылаться на них из не веб-приложений и не зависеть от System.Web. Как лучше всего зарегистрировать модули, которые можно использовать в этих различных контекстах?