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

时间:2015-11-20 10:08:33

标签: c# dependency-injection autofac asp.net-core

根据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例外

1 个答案:

答案 0 :(得分:1)

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

如果您真的希望这样做,您需要引用当前的IContainer和update it