Generics C#动态字典

Generics C#动态字典,generics,c#-3.0,Generics,C# 3.0,我想找到一种方法来创建一个包含各种模拟对象的字典,这些对象的各种实例都由某种唯一标识符键入。我使用的是Moq,所以就键入而言,它的语法是Mock。但我希望字典基本上包含以下内容,以便在运行时动态解析和覆盖实例: Key = IFoo (basically a type) Value = new SomeCustomType< T > { T ConcreteObject Mock< T > MockObject } Key=IFoo(基本上是一种类型) 值=新

我想找到一种方法来创建一个包含各种模拟对象的字典,这些对象的各种实例都由某种唯一标识符键入。我使用的是Moq,所以就键入而言,它的语法是
Mock
。但我希望字典基本上包含以下内容,以便在运行时动态解析和覆盖实例:

Key = IFoo (basically a type)

Value = new SomeCustomType< T >
{
  T ConcreteObject
  Mock< T > MockObject
}
Key=IFoo(基本上是一种类型)
值=新的SomeCustomType
{
T具体对象
MockMockObject
}

我可能无法恰当地表达我的问题,但我需要一些帮助

我不能100%确定我是否理解这个问题,但这是我的看法。如果需要按类型键入实例字典,最简单的方法是使用静态泛型类而不是实际字典:

public static class Dict<T> {
    public static T Instance { get; set; }
}
然后,您可以按照以下步骤进行操作:

Mock<IFoo> myMock = ...
MockDict<IFoo>.Instance = myMock;
...
Mock<IFoo> myMock2 = MockDict<IFoo>.Instance;
Mock myMock=。。。
MockDict.Instance=myMock;
...
Mock myMock2=MockDict.Instance;

如果您不需要具体对象,可以使用


.

这些键和值究竟是什么,它们的用途是什么?我很难理解你所说的“Key=IFoo”是什么意思。接口不是一个对象,如果你在任何地方都使用它,它肯定不会是唯一的键。我认为键应该是类型的实例。因此,也许一个例子是typeof(IFoo)。该值将是该类型的具体对象的实例和该类型的模拟对象。似乎您正在尝试重新创建类似于自动模拟容器的内容,但您希望具体对象做什么?很好。我可能不需要具体的对象,我正在尝试实现一种形式的自动模拟。你说的是什么自动模拟容器?
Mock<IFoo> myMock = ...
MockDict<IFoo>.Instance = myMock;
...
Mock<IFoo> myMock2 = MockDict<IFoo>.Instance;