有两个问题
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
}
public Manage(DB _db, IEnumerable<IPlugin> plugins)
{
}
public void Manage(Type type)
{
var IPlugin plugin = (IPlugin) GlobalResolve.Resolve(type);
}
答案 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
}