С некоторыми предположениями о том, как работает AutoFac, я не смог заставить свой код работать в моем приложении ASP.NET 5. Я включил AutoFac в качестве рамки DI в мое приложение ASP.NET 5 и все работает отлично, а зависимости, которые я регистрирую до первого вызова метода Build
, получают инъекцию в порядке, но когда я пытаюсь зарегистрировать Modules
из других сборок, на которые ссылается основная сборка, я больше не могу вводить тему в контроллер.AutoFac - Регистрация услуг с помощью ILifetimeScope после первого вызова `Build`
это то, что я пробовал:
ContainerBuilder builder = new ContainerBuilder();
builder.Register<MyService>().As<IMyService>();
builder.Build();
и после этого я уже создать и зарегистрирован Module
:
public class MyModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<SomeService>()
.As<ISomeService>()
.SingleInstance();
}
}
и в классе менеджера по инъекционным ILifetimeScope
:
public class ManagerClass(){
private readonly ILifetimeScope _lifetimeScope;
public ManagerClass(ILifetimeScope lifetimeScope){
_lifetimeScope = lifetimeScope;
}
public void RegisterModules(){
_lifetimeScope.BeginLifetimeScope(builder =>
{
builder.RegisterAssemblyModules(blueprint.Assemblies.Select(b=>b.Assembly).ToArray());
});
}
}
Я установил точку останова на Load
метод MyModule
класс, и он попадает, но когда я пытаюсь ввести ISomeService
(зарегистрированный MyModule), я получаю исключение ComponentNotRegisteredException
.