2010-12-06 22 views
0

Je ne sais pas si c'est quelque chose qui peut être géré par un DI, car je suis encore en train d'enrouler ma tête en utilisant un DI.Comment puis-je configurer mon programme pour remettre un objet à la bonne classe?

Projet: J'ai un objet de ISettings que je veux passer à une classe ISettingsVerification. Cependant, j'ai un certain nombre de classes différentes qui héritent de ISettingsVerification. Ces classes gèrent toutes différemment l'objet ISettings en fonction d'une propriété particulière (IisVersion).

Question: Comment puis-je le configurer de sorte que dans le programme principal, je ne vous inquiétez pas quelle classe ISettingsVerification obtient l'objet ISettings, que mon programme se chargera de cette logique. Je suis familier avec l'utilisation du DI Ninject, serait-ce quelque chose que je pourrais faire là-bas, ou vais-je devoir utiliser quelque chose comme une déclaration Switch pour faire cette détermination? J'aime l'idée d'extraire cette logique du cœur de mon application.

Merci

Répondre

1

Vous aurez probablement écrire une instruction switch quelque part. Mais bien sûr, il ne doit pas être dans le «cœur de l'application».

Une solution serait d'utiliser une sorte d'usine:

public class SettingsVerificationFactory : ISettingsVerificationFactory 
{ 
    public ISettingsVerification Create(Version iisVersion) 
    { 
     switch (iisVersion) 
     { 
      case 6: 
       return new Iis6SettingsVerification(); 
      case 7: 
       return new Iis7SettingsVerification(); 
      // etc... 
     } 
    } 
} 

Vous pouvez maintenant utiliser cette usine (par injection ou directement) lorsque vous avez besoin d'un vérificateur pour un objet paramètres.

+0

@rmac: Merci, c'est ce que j'ai continué à venir. Une question de suivi que j'ai pour vous est la suivante: Puisque je vais probablement générer différents objets ISettings déterminés par les versions d'OS/IIS avec lesquelles je travaille - et cet objet est passé dans SettingsVerificationFactory, Serait-il préférable de) soumettez l'objet ISettings à la classe ISettingsVerification correcte en fonction d'une propriété de l'objet ISettings (ie IisVersion) ou de la classe typeof (ie Iis6Settings) OU – pghtech

+0

B) faites en sorte que l'IVerificationFactory "suppose" qu'il a reçu l'objet ISettings correct et Laisser l'IVerificationFactory vérifier la version IIS locale et sur ses résultats transmettre l'objet ISettings à l'objet VerificationSettings correct? – pghtech

+0

Il est un peu difficile à dire à partir de cette information, mais si vous avez déjà déterminé et stocké la version d'IIS, pourquoi ne pas réutiliser cette valeur. – rmac