Simple Injector 工厂设施

Factory facility in Simple Injector

我正在从 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 的工厂设施能够根据您提供的接口生成代理 class。此代理 class 将回调容器以请求创建此类新实例。

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 });