我正在从 Windsor
迁移到 Simple Injector
,我尝试遵循以下 this link 。但我找不到任何替代品:
container.AddFacility<TypedFactoryFacility>();
container.Register(Component.For<ICacheDependencyFactory>().AsFactory());
简单注入(inject)器
中的上述代码将被什么替换?
编辑:
ICacheDependencyFactory.cs
public interface ICacheDependencyFactory
{
T Create<T>()
where T : ICacheDependency;
void Release<T>(T cacheDependency)
where T : ICacheDependency;
}
最佳答案
CaSTLe 的工厂设施能够根据您提供的接口(interface)生成代理类。该代理类将回调到容器中以请求创建此类类型的新实例。
简单注入(inject)器缺乏这样的功能。简单注入(inject)器没有实现这一点,因为:
- 您的应用程序代码所需的工厂数量应该相当有限(最多只有几个)。 设计良好的应用程序几乎不需要工厂。
- 使用手写工厂来实现这一点非常容易。
- 手写工厂应该成为您的 composition root 的一部分(已经存在对容器的依赖)。这可以防止应用程序代码必须依赖于容器。
这是一个例子:
private sealed class CacheDependencyFactory : ICacheDependencyFactory {
public Container Container { get; set; }
public T Create<T>() where T : ICacheDependency, class {
return this.Container.GetInstance<T>();
}
}
该工厂可以按如下方式注册:
container.RegisterSingle<ICacheDependencyFactory>(
new CacheDependencyFactory { Container = container });
关于c# - 简单注入(inject)器的工厂设施,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31092066/