Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用简单注入器注册开放通用单例_C#_.net_Dependency Injection_Inversion Of Control_Simple Injector - Fatal编程技术网

C# 使用简单注入器注册开放通用单例

C# 使用简单注入器注册开放通用单例,c#,.net,dependency-injection,inversion-of-control,simple-injector,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).Ful

我有下面的代码,并且想为泛型的每个不同变体注册一个单例。这可能吗?当前,断言失败,因为对象类型不同

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));
}
公共接口IGenericClass
{
字符串GetToString();
}
公共类GenericClass:IGenericClass
{
公共字符串GetToString()
{
返回typeof(T).全名;
}
}
[测试]
公开无效测试()
{
var container=新容器();
container.RegisterOpenGeneric(
类型(IGenericClass),
typeof(GenericClass));
var instance1=container.GetInstance();
var instance2=container.GetInstance();
//这应该是正确的
IsTrue(object.ReferenceEquals(instance1,instance2));
}

只需使用注册SingleOpenGeneric即可:

\u container.RegisterSingleOpenGeneric(
类型(IGenericClass),
typeof(GenericClass));

我怎么没看到!非常感谢:)