簡體   English   中英

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

[英]Autofac. RegisterType after .Build and register/resolve list

有兩個問題

  1. 在ApplicationContainer = builder.Build()之后如何正確的builder.RegisterType(..)

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
public Manage(DB _db, IEnumerable<IPlugin> plugins)
{
}
  1. 在任何地方按類型解析
public void Manage(Type type)
{
  var IPlugin plugin = (IPlugin) GlobalResolve.Resolve(type);
}

我認為您不需要IoC作為插件加載程序。

但是,如果您堅持要我將責任分在兩個單獨的容器中。 一個容器將具有查找插件類型所需的所有位,另一個容器被您的應用程序用於“正常”工作。 在應用啟動期間,您使用初始化容器創建另一個容器。

您還可以使用容納插件加載程序的容器,並使用該容器創建另一個容器。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM