在Parameterized Instantiation (Func<X, Y, B>
)文档中,最后一句话说
但是,如果将对象注册为SingleInstance()并调用Func来多次解析对象,则每次都会获得相同的对象实例,而不管传入的参数是否相同。只是传递不同的参数不会打破对终身范围的尊重。
它是如何使用不同参数构造函数的单例类。
答案 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();