gpt4 book ai didi

c# - Simple Injector 工厂设施

转载 作者:行者123 更新时间:2023-11-30 20:42:44 25 4
gpt4 key购买 nike

我正在从 Windsor 迁移到 Simple Injector,我尝试遵循以下 this link .但我找不到任何替代品:

container.AddFacility<TypedFactoryFacility>();
container.Register(Component.For<ICacheDependencyFactory>().AsFactory());

Simple Injector 中用什么替换上面的代码?

编辑:

ICacheDependencyFactory.cs

public interface ICacheDependencyFactory
{
T Create<T>()
where T : ICacheDependency;

void Release<T>(T cacheDependency)
where T : ICacheDependency;
}

最佳答案

CaSTLe 的工厂设施能够根据您提供的接口(interface)生成代理类。该代理类将回调容器以请求创建此类新实例。

Simple Injector 缺少这样的功能。 Simple Injector 没有实现这个,因为:

  • 您的应用程序代码需要的工厂数量应该相当有限(最多只有几个)。设计良好的应用程序几乎不需要工厂。
  • 使用手写工厂实现这一点真的很容易。
  • 手写工厂应该是你的一部分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# - Simple Injector 工厂设施,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31092066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com