根据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());
});
}
}
我在Load
类的MyModule
方法上放了一个断点,它被点击了,但是当我尝试注入ISomeService
(由MyModule注册)时,我得到ComponentNotRegisteredException
例外
答案 0 :(得分:1)
这通常不是如何配置依赖注入的。您应该在启动时配置一次依赖项。在这种情况下,工厂模式可能是更好的解决方案吗?
如果您真的希望这样做,您需要引用当前的IContainer和update it