Я устанавливаю инфраструктуру плагинов для своего программного обеспечения, я использую AutoFac для облегчения разрешения всех зависимостей.
Проблема в том, что я не знаю, как разрешить зависимость, когда онавызван к дочернему контейнеру Resolve метод
https://github.com/ChickenAPI/ChickenAPI.Core/blob/master/test/ChickenAPI.Core.Tests/Ioc_Test.cs
Я уже пробовал через модули, но он не работал должным образом, все еще пропускаю childContainer.Resolve ();который не работает
var pluginBuilder = new ContainerBuilder();
pluginBuilder.RegisterType<TestCorePlugin>().AsSelf().AsImplementedInterfaces();
IContainer container = pluginBuilder.Build();
var coreBuilder = new ContainerBuilder();
foreach (ICorePlugin plugin in container.Resolve<IEnumerable<ICorePlugin>>())
{
plugin.OnLoad()
}
coreBuilder.RegisterModule(new NLogModule());
using (IContainer coreContainer = coreBuilder.Build())
{
var gameBuilder = new ContainerBuilder();
gameBuilder.RegisterInstance(coreContainer).As<IContainer>();
gameBuilder.RegisterTypes(typeof(Ioc_Test).Assembly.GetTypesImplementingInterface<IGamePlugin>()).AsSelf().AsImplementedInterfaces();
IContainer gameContainer = gameBuilder.Build();
IEnumerable<IGamePlugin> plugins = gameContainer.Resolve<IEnumerable<IGamePlugin>>();
foreach (IGamePlugin gamePlugin in plugins)
{
gamePlugin.OnEnable();
gamePlugin.OnDisable();
}
gameContainer.Resolve<DependencyOnlyInCoreContainer>();
}
Я пытался с модулем: https://github.com/ChickenAPI/ChickenAPI.Core/blob/master/test/ChickenAPI.Core.Tests/CoreContainerModule.cs
Но это работает только тогда, когда объект зарегистрирован в дочернем контейнере и нуждается в некоторых из зарегистрированных зависимостей основного контейнера