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异常。

AutoFac-在首次调用“Build”后,通过ILifetimeScope注册服务

依赖项注入通常不是这样配置的。您应该在启动时配置一次依赖项。在这种情况下,也许工厂模式是更好的解决方案?

如果你真的想这样做,你需要引用当前的IContainer并更新它