AutoFac-在首次调用“Build”后,通过ILifetimeScope注册服务
本文关键字:通过 ILifetimeScope 服务 注册 Build 调用 AutoFac- | 更新日期: 2023-09-27 18:22:46
根据AutoFac的工作原理,我无法在ASP.NET 5应用程序中运行代码。我已经将AutoFac作为DI框架集成到我的ASP.NET 5应用程序中,一切都很好,并且我在第一次调用Build
方法之前注册的依赖项被注入得很好,但当我试图从主程序集引用的其他程序集注册Modules
时,我无法再在控制器中注入主题。
这就是我尝试过的:
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());
});
}
}
我在MyModule
类的Load
方法上放了一个断点,它被击中了,但当我尝试注入ISomeService
(由MyModule注册)时,我得到了ComponentNotRegisteredException
异常。
依赖项注入通常不是这样配置的。您应该在启动时配置一次依赖项。在这种情况下,也许工厂模式是更好的解决方案?
如果你真的想这样做,你需要引用当前的IContainer并更新它