c# - 简单注入(inject)器的工厂设施

标签 c# asp.net .net simple-injector

我正在从 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/

相关文章:

asp.net - 清除缓存后,set-cookie 不适用于 IE11/10

.net - 什么是卫星组件?

c# - 富文本框有焦点时如何打开大写锁定

c# - 如何仅在 Release模式下在 web.config 中设置属性?

c# - 使用 Unity XML 配置文件在构造函数中注入(inject)复杂对象

c# - 在 Dynamic Linq 中使用 Any() 和 Count()

javascript - 我无法访问 <asp :textbox> value in code behind file

c# - 在 LINQ LIST<> 中选择列运行时

c# - 有条件地组合两个 Rx 流

c# - 如何使用 XmlReader 读取 json