Autofac - разрешение зависимости родительского контейнера от дочернего контейнера - PullRequest
0 голосов
/ 17 июня 2019

Я устанавливаю инфраструктуру плагинов для своего программного обеспечения, я использую 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

Но это работает только тогда, когда объект зарегистрирован в дочернем контейнере и нуждается в некоторых из зарегистрированных зависимостей основного контейнера

...