2009-06-03 6 views
0

Donc, dire que j'ai le type qui prend des paramètres dans le constructeur, comme celui-ci:IoC vs variable globale dans la bibliothèque

public MyType(IComObject wrapper,string table) {} 

maintenant IComObject est une enveloppe sur deux objets COM différents. Tous (90%) de mes types doivent utiliser IComObject, donc en mode DI (pour permettre les tests) je passe IComObject dans tous les types qui en ont besoin.

Le problème principal est que lorsque quelqu'un utilise ma librairie COM wrapper qui doit passer une instance d'IComObject dans tout ce qu'ils font, cela rend le code un peu difficile à gérer et à maintenir.

Je me demandais si je devrais utiliser un conteneur IoC ou une variable globale que l'utilisateur peut définir de sorte qu'ils n'aient pas à passer l'instance IComOject. Exemple:

public MyType(string table) 
     : this(IoC.Resolve<IComObject>,table) {} 

ou

public MyType(string table) 
    : this(StaticClass.ComInstance,table) {} 

Pour que l'utilisateur peut faire:

//Set up Ioc container 
COMObject object = new COMObject(); 
Ioc.Register(typeof(IComObject),object); 
MyType mytype = new MyType("test.tab"); 

ou

COMObject object = new COMObject(); 
StaticClass.ComInstance = object; 
MyType mytype = new MyType("test.tab"); 

Que pensez-vous que je devrais faire dans cette situation ?

Répondre

0

Utilisez un conteneur, c'est le point dans eux. Je n'ai utilisé que StructureMap mais je peux le recommander. Beaucoup de docs, et c'est vraiment facile à utiliser. Une fois que vous êtes à l'aise de travailler avec vous, vous allez adorer la facilité avec laquelle les choses sont faites. Découplage pour la victoire!

En réalité, votre conteneur sera une classe statique que vous interrogez des objets, donc il sorte de ne est pas vraiment un choix :)

+0

Je m'inquiétais juste pour que l'utilisateur ait à se soucier de la configuration du conteneur IoC. –

1

IoC est certainement le chemin à parcourir. Les globals ne sont pas le pire des maléfices de la programmation, et un petit nombre de globals ne sont pas la pire des choses, mais IoC est un modèle agréable et propre qui est bien compris et plus facile à maintenir à long terme. Les dépendances sont également plus explicites avec IoC.

Questions connexes