2016-04-25 26 views
2

Ich gehe über Abhängigkeitsinjektion. Ich habe ein ASP.NET MVC-Projekt, wo das Modell Kunden gestattet:ASP.NET MVC - Dependency Injection

public class Customers 
{ 
    public ID get; set; 
    private Customer customer 

    public Customers() 
    { 
     customer = new Customer(); 
    } 
} 

Jetzt ist ich nehme Klassen hinzuzufügen, um die Abhängigkeit in der obigen Klasse zu beseitigen. Zum Beispiel ist Kunde eine Abhängigkeit der Kundenklasse. Kunden sollten sich auf eine Abstraktion verlassen. Ich habe eine Schnittstelle (oder eine abstrakte Klasse) mit dem Namen IStorageCustomer

public interface IStorageCustomer 
{ 
} 

Jetzt habe ich die Kunden-Klasse die folgenden folgt geändert:

public class Customers 
{ 
    public ID get; set; 
    private IStorageCustomer customer; 

    public Customers(IStorageCustomer customer) 
    { 
     this.customer = customer; 
    } 
} 

Ich muss wissen, ob die Abhängigkeit in der obigen Klasse eliminiert wurde . Was muss ich noch tun? Bitte helfen Sie. Jede Hilfe wird sehr geschätzt. Vielen Dank.

+0

hinzufügen Welche Rolle der '' Kunden 'und Customer' Klassen in Ihrer Anwendung spielen? – Steven

+0

Was meinst du mit Rolle? Kannst du mir ein Beispiel geben? – dkostraa

+0

Was machen diese Klassen? Ist "Kunde" eine Einheit? Ermöglicht 'Customers' das Laden von Entitäten aus der Datenbank? – Steven

Antwort

0

Sie können Ninject MVC installieren. (Beachten Sie, dass es für jede Version von MVC unterschiedliche Versionen gibt)

Dies ist ein Nugget, der die Abhängigkeit Injection für Sie verwaltet.

Damit Ninject die richtige Klasse injiziert, sollten Sie es in der NinjectWebCommon-Datei einrichten.

private static void RegisterServices(IKernel kernel) 
{ 
    //all your bindings will be configured here 
    kerenl.Bind<IStorageCustomer>().To<Costumer>(); //if you want Customer instances to be injected everywhere you expect an IStorageCustomer 
} 

Lassen Sie auch einen Standardkonstruktor für die Klasse, in die Sie Instanzen injizieren möchten.

0

Anstelle des Kunden werde ich ihn in Person umbenennen. Jetzt sind hier die Änderungen, die ich bis jetzt habe. Dies schließt auch Klassen ein, die ich gerade hinzugefügt habe. Das einzige Problem ist, dass auf die Person in der Modellklasse "Customers" nicht zugegriffen werden kann, da sie privat ist und ihren Typ hat.

public class Customers 
{ 
    public int ID { get; set; } 
    private IStoragePerson person; 

    public Customers() 
    { 
     this.person = LocateCustomer.GetCustomer(); 
    } 
} 

public class Person : IStoragePerson 
{ 
    public string person{ get; set; } 
} 

Sie nicht wissen, was für IStoragePerson

public interface IStoragePerson 
{ 
} 

public class LocateCustomer 
{ 
    public static IStoragePerson person{ get; set; } 
    public static IStoragePerson GetCustomer() 
    { 
     if(person == null) 
     { 
      person = new Person(); 
     } 
     return person; 
    } 
}