Autofac。在.Build和注册/解析列表之后的RegisterType

时间:2017-02-17 13:17:00

标签: c# inversion-of-control autofac

有两个问题

  1. ApplicationContainer =之后的builder.RegisterType(..)如何正确 builder.Build()
  2. builder.Update(ApplicationContainer)已过时

    public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        ...
        builder.RegisterType<DB>();
        ApplicationContainer = builder.Build();
    }
    
    public void Configure()
    {
       //Get list of types assigned from IPlugin
       List<Type> types = PluginLoader.LoadPlugins(); <--- will need DB registered early
       foreach (var item in plugins)
       {
           builder.RegisterType(item);
       }
       builder.Update(ApplicationContainer); <-- .Update() is Obsolete
    }
    
    1. 如何获取所有IPlugin
    2. public Manage(DB _db, IEnumerable<IPlugin> plugins)
      {
      }
      
      1. 在任何地方按类型解析
      2. public void Manage(Type type)
        {
          var IPlugin plugin = (IPlugin) GlobalResolve.Resolve(type);
        }
        

1 个答案:

答案 0 :(得分:1)

我认为你不需要IoC作为插件加载器。

但是,如果你坚持我会将责任分成两个单独的容器。一个容器将具有查找插件类型所需的所有位和另一个容器,该容器由您的应用程序用于“正常”#39;职责。在应用程序启动期间,您使用初始化容器来创建另一个容器。

您还可以使用容纳pluginloader的容器并使用它来创建另一个容器。

        using (var applicationScopeContainer = _initializationContainer.BeginLifetimeScope(
             builder =>
             {
                 //register your new stuff here, resolve dependencies via _initializationContainer
             }))
        {
            //resolve all depenencies via applicationScopeContainer
        }