我正在尝试使用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的人可以帮我弄清楚如何做到这一点吗?我很乐意为文档编写它。
答案 0 :(得分:0)
文档(xml docs)可能已过时,因为它不使用IUnityContainer。实际上它在Catel中使用了IServiceLocator。
使用您自己的实现替换IServiceLocator的最佳方法是将其注入构造函数(BootstrapperBase)。我还将向其他bootstrappers添加相同的构造函数覆盖(使用TShell和TShell,TModuleCatalog)
另一个选择是替换IoCConfiguration.DefaultServiceLocator。如果没有指定服务定位器,引导程序将回退到那个引导程序。
答案 1 :(得分:0)
这是我对Catel 3.8和Autofac的解决方案。也适用于不同的第三方容器。