c# - 使用简单注入(inject)器注册开放通用单例

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

最佳答案

只需使用RegisterSingleOpenGeneric:

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

关于c# - 使用简单注入(inject)器注册开放通用单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14628013/

相关文章:

.net - 如何 : set A4 size in a WPF usercontrol?

c# - 如何在同一程序集中成功编译自引用类或循环引用类

java - 根据系统属性注入(inject) spring bean

.net - 温莎城堡并将实例创建为工厂

c# - 依赖注入(inject)问题——如何清理我的实现?

c# - 如何访问azure webrole中的signalr hub

c# - 单元测试纯领域驱动类

c# - 防止属性(property)重新分配

c# - 获取 AppDomain.CurrentDomain 中所有用户创建的类

.net - 如何在不重定向的情况下读取 Process.StandardOutput ? (F#)