2010-01-20 4 views
0

Je voudrais trouver un moyen d'avoir un dictionnaire de divers objets Mock avec leurs différentes instances entrés par une sorte d'identifiant unique. J'utilise Moq, donc la syntaxe pour cela est Mock<IFoo> dans la mesure où la frappe va. Mais je voudrais avoir le Dictionnaire CONTENIR essentiellement ce que je puisse résoudre dynamiquement et remplacer les instances à l'exécution: je neC# Dynamic Dictionary

Key = IFoo (basically a type) 

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

recevoir ma question à travers mais je pourrais convenablement utiliser un peu d'aide!

+0

Quelles seraient les clés et les valeurs, exactement, et à quoi serviraient-elles? J'ai du mal à comprendre ce que vous entendez par "Key = IFoo". Une interface n'est pas un objet, et elle ne sera certainement pas une clé unique si vous l'utilisez partout. –

+1

Je pense que la clé serait une instance de type. Donc peut-être un exemple serait typeof (IFoo). La valeur serait une instance d'un objet concret de ce type et d'un objet fantaisie de ce type. –

+1

Il semble que vous essayez de réinventer quelque chose de similaire au conteneur d'autoblockage, mais à quoi voulez-vous que l'objet concret? –

Répondre

1

Je ne suis pas sûr à 100% que je comprends la question, mais voici ma prise. Si vous voulez un dictionnaire des instances calées par type, la meilleure façon de le faire est d'utiliser une classe générique statique plutôt qu'un dictionnaire réel:

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

Ensuite, pour définir l'instance associé au type IFoo vous feriez Dict<IFoo>.Instance = myIFooInstance;, et pour le sortir, vous devez simplement stocker le résultat de Dict<IFoo>.Instance.

Si au contraire, vous voulez sortir Mock cas calées par types, vous pourriez faire quelque chose de très similaire:

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

Ensuite, vous pouvez faire quelque chose le long des lignes de:

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