如何使用caliburn.micro的SimpleContainer在另一个程序集中注册依赖项



我正在使用caliburn.micro开发一个模块化GUI应用程序,我想为每个模块单独执行引导过程。我这样做的原因是每个模块都应该能够定义自己的依赖项,而使用它的应用程序应该执行i(在特定情况下除外(对我来说没有什么意义

我可以通过在主助推器中创建一个子容器

container.CreateChildContainer();

但是我不知道如何注册这个容器以供我的模块使用。有关于如何做到这一点的指针吗?

我可以将子模块传递给我的模块的助推方法,注册我需要的东西,但不知道以后该如何处理这个容器。

谢谢你并致以最良好的问候,

我找到了一个部分有效的解决方案。然而,我对它是否是正确的有一些怀疑:

我的模块有一个基类,它注册在引导程序类的容器内。容器注册自身,以便可以将其注入模块构造函数:

private SimpleContainer container = new SimpleContainer();
protected override void Configure()
{
container.Instance<container>();
container.Instance<ILoggerFactory>(loggerFactory);
container.Instance<IConfiguration>(config);
container.Singleton<TestModule>();
}

在我的模块类中,从构造函数调用一个初始化方法,该方法创建一个子容器并在其中注册所需的类。

public TestModule(IConfiguration config, ILoggerFactory loggerFactory, SimpleContainer mainContainer) 
{
_modulecontainer = container.CreateChildContainer();
}
protected override void Initialize()
{
ModuleContainer.Singleton<TesterClass>();
ModuleContainer.Singleton<ServiceTesterViewModel>();
}

这使我能够在模块中使用构造函数注入,而无需在应用程序的引导程序中添加模块的每个细节。此外,我不必将模块中的每个viewModel都声明为public。

但是,我不确定这是否是一个合适的解决方案,因为我无法使它像文档中描述的那样工作。根据它,我应该能够覆盖以前的声明,但它不起作用。如果我尝试直接使用childContainer获取一个实例。我得到一个例外";序列包含一个以上的元素";因为我的类作为singleton注册了两次:

ServiceTesterViewModel mainViewModel = ModuleContainer.GetInstance<ServiceTesterViewModel>(); 

任何人都可以告诉我这是否是一个合适的解决方案,或者给我一些应该做什么的建议。

最新更新