在Catel中替换IOC容器

时间:2013-10-23 19:13:03

标签: catel

我正在尝试使用SimpleInjector替换Catel中的内置IOC容器。

从他们的prism示例(我正在使用catel + prism)引导程序声称将在以下片段中配置Unity:

/// <summary>
/// Configures the <see cref="IUnityContainer"/>. May be overwritten in a derived class to add specific
/// type mappings required by the application.
/// </summary>
protected override void ConfigureContainer()
{
    base.ConfigureContainer();

    Container.CanResolveNonAbstractTypesWithoutRegistration = true;

    Container.RegisterType<IDepartmentRepository, DepartmentRepository>();
    Container.RegisterType<IEmployeeRepository, EmployeeRepository>();
}

但是我没有看到它如何配置IUnityContainer并且根据我的调试器,它实际上并不配置统一(正在使用的Container是Catel的内置ServiceLocator)。更熟悉Catel的人可以帮我弄清楚如何做到这一点吗?我很乐意为文档编写它。

2 个答案:

答案 0 :(得分:0)

文档(xml docs)可能已过时,因为它不使用IUnityContainer。实际上它在Catel中使用了IServiceLocator。

使用您自己的实现替换IServiceLocator的最佳方法是将其注入构造函数(BootstrapperBase)。我还将向其他bootstrappers添加相同的构造函数覆盖(使用TShell和TShell,TModuleCatalog)

另一个选择是替换IoCConfiguration.DefaultServiceLocator。如果没有指定服务定位器,引导程序将回退到那个引导程序。

答案 1 :(得分:0)

这是我对Catel 3.8和Autofac的解决方案。也适用于不同的第三方容器。

https://stackoverflow.com/a/20458474