2010-01-20 64 views
0

我想找到一种方法来获得各种模拟对象的字典与各种实例由某种唯一标识符键入。我正在使用Moq,因此就键入而言,其语法是Mock<IFoo>。但我想有字典包含基本上是这样的,所以我可以动态地解析和运行时覆盖实例:C#动态字典

Key = IFoo (basically a type) 

Value = new SomeCustomType<T> 
{ 
    T ConcreteObject 
    Mock<T> MockObject 
} 

我可能不会得到我的问题在整个适当的,但我可以利用一些帮助!

+0

准确地说,键和值会是什么,它们将用于什么?我无法理解“Key = IFoo”的含义。一个接口不是一个对象,如果你在任何地方使用它,它肯定不会是一个唯一的键。 – 2010-01-20 03:27:33

+1

我认为Key将是Type的一个实例。所以也许一个例子是typeof(IFoo)。 该值将是该类型的具体对象和该类型的模拟对象的一个​​实例。 – 2010-01-20 03:33:42

+1

看起来你正在尝试重新创建类似于automocking容器的东西,但是你希望具体对象是什么? – 2010-01-20 04:10:17

回答

1

我不是100%确定我明白这个问题,但这是我的看法。如果您想通过类型键入实例的字典,做到这一点的最简单方法是使用静态泛型类,而不是实际的字典:

public static class Dict<T> { 
    public static T Instance { get; set; } 
} 

然后,设置与类型相关的实例IFoo你会怎么做Dict<IFoo>.Instance = myIFooInstance;,并将其恢复出来,您只需存储Dict<IFoo>.Instance的结果。

相反,如果你想要得到的类型键控Mock情况下,你可以做一些非常相似:

public static class MockDict<T> { 
    public static Mock<T> Instance { get; set; } 
} 

然后,您可以沿着线做一些事情:

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