参数化实例化如何与SingleInstance lifescope一起使用

时间:2015-05-02 09:13:22

标签: c# autofac

Parameterized Instantiation (Func<X, Y, B>)文档中,最后一句话说

  

但是,如果将对象注册为SingleInstance()并调用Func来多次解析对象,则每次都会获得相同的对象实例,而不管传入的参数是否相同。只是传递不同的参数不会打破对终身范围的尊重。

它是如何使用不同参数构造函数的单例类。

1 个答案:

答案 0 :(得分:0)

最后,我的同事有类似的方法

public interface IKey
{
}

public interface IKeyed<out T>
{
    T this[IKey key] { get; }
}

public class Keyed<T> : IKeyed<T>
{
    private ConcurrentDictionary<IKey, T> _dict = new ConcurrentDictionary<IKey,T>();

    T IKeyed<T>.this[IKey key]
    {
        get 
        {
            return _dict.GetOrAdd(key, k => IoC.Resolve<T>(new TypedParameter(key.GetType(), key)));
        }
    }
}

并在应用开始时注册

   _builder.RegisterGeneric(typeof(Keyed<>))
        .As(typeof(IKeyed<>))
        .SingleInstance();