2010-09-11 15 views
0

Je me suis lentement enseigné les principes fondamentaux de la programmation basée sur l'interface et j'ai du mal à comprendre certains principes concernant l'inversion du contrôle spécifiquement avec Ninject.Basic Ninject Informations requises

Disons que j'ai une classe de modèle concret comme suit ...

public sealed class Host : EntityAuditable<Host, Guid> 

J'ai une classe de base qui définit des méthodes pour le modèle comme celui-ci ....

public abstract class EntityAuditable<T, TKey> : 
    IEntity, 
    IDisposable, 
    IComparable<EntityAuditable<T, TKey>> 
    where T : EntityAuditable<T, TKey>, new() 

IEntity est une interface très simple qui définit une propriété d'objet 'Id'.

Maintenant, le constructeur de ma classe d'accueil serait le suivant ....

public Host(IService<Host> service) 
{ 
    this.service = service; 
    this.id = Guid.NewGuid(); 
} 

Lorsque la mise en œuvre des méthodes IService de persister des objets au référentiel spécifique au service.

Ce que je voudrais faire est de fournir des méthodes statiques dans ma classe de base pour que je puisse écrire du code comme

Host.LoadAll(); 

et je sais que mes fixations seront injectés correctement. Mon implémentation dans la classe de base serait quelque chose de similaire ...

public static IList<T> LoadAll() 
    { 
     T instance = new T(); 
     List<T> instances = new List<T>(instance.DataSelectAll()); 
     // Clean up the instance. 
     instance.Dispose(); 
     return instances; 
    } 

Est-ce possible ou est-ce que je fais quelque chose de fondamentalement faux?

Est-ce que Ninject fonctionne de telle sorte qu'il sait qu'il devrait appeler mon constructeur paramétré quand j'appelle new T()? Les exemples que j'ai trouvés dans la documentation (qui est malheureusement obsolète) utilisent le noyau pour créer l'objet mais je ne veux pas que le noyau crée du code éparpillé dans mes modèles.

Je ferais toutes mes liaisons dans mon fichier Global.ascx.

+0

Merci pour la modification. Cela rendait tout plus facile à lire. –

Répondre

1

En réponse à ma propre question, il s'avère que mon approche était incorrecte.

En supprimant les méthodes statiques et en utilisant mes contrôleurs mvc pour la logique métier, j'ai obtenu une meilleure séparation et un code beaucoup plus propre et plus facile à maintenir. Relier tout avec ninject était beaucoup plus facile alors.