使用Simple Injector注册开放的通用单例

时间:2013-01-31 14:22:50

标签: c# .net dependency-injection inversion-of-control simple-injector

我有以下代码,并希望为通用的每个不同变体注册一个单例。这可能吗?目前,断言失败,因为不是相同的对象类型。

public interface IGenericClass<T>
{
    string GetToString();
}

public class GenericClass<T> : IGenericClass<T>
{
    public string GetToString()
    {
        return typeof (T).FullName;
    }
}

[Test]
public void test()
{
    var container = new Container();

    container.RegisterOpenGeneric(
        typeof(IGenericClass<>), 
        typeof(GenericClass<>));

    var instance1 = container.GetInstance<IGenericClass<double>>();
    var instance2 = container.GetInstance<IGenericClass<double>>();

    //this should assert true
    Assert.IsTrue(object.ReferenceEquals(instance1, instance2));
}

1 个答案:

答案 0 :(得分:2)

只需使用RegisterSingleOpenGeneric

_container.RegisterSingleOpenGeneric(
    typeof(IGenericClass<>), 
    typeof(GenericClass<>));