0

Ich verwende Einheit, um Dependency Injection in meiner .NET Web API-App zu implementieren. ist die relevent Teil meiner WebApiCongigSo registrieren Sie Abhängigkeiten nach Namen in Unity

public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 

      var container = new UnityContainer(); 
      AppDependancyRegistry.Register(container); 
      config.DependencyResolver = new UnityResolver(container); 

     } 
    } 

Und hier meine AppDependancyRegistry Klasse ist

public static class AppDependancyRegistry 
     { 
      public static void Register(UnityContainer container) 
      { 
        container.RegisterType(typeof(IBaseRepository<>), typeof(BaseRepository<>)); 
        //container.RegisterTypes(AllClasses.FromLoadedAssemblies(), WithMappings.FromMatchingInterface, WithName.Default); 

      } 
     } 

ich die Allgemein Repositores zugeordnet haben, aber ich konnte nicht mit der Registrierung der Manager-Klassen an seinen Schnittstellen durchkommen. Ich möchte nicht alle Manager-Klassen manuell zuordnen.

Ich habe den Teil kommentiert, den ich aus der ganzen Forschung gemacht habe. Ich möchte nur eine Bestätigung, das ist, wie ich es tun, wie ich jetzt meine App läuft, ohne dabei einige mehr Sachen

Meine Klassen-Manager erhalten kann nicht: Schnittstellen sieht aus wie

DutyManager: IDutyManager 
UserDetailManager:IUserDetailManager 

usw. Vielen Dank im Voraus

+0

* Ich möchte nicht Manaually jeder von Manager-Klassen zur Karte * - warum nicht? –

+0

Mehr Arbeit .. ist schlecht. ist mein Konzept. Lernen Sie einmal ist gut –

+0

Sie können alle Implementierungen einer einzigen Schnittstelle Bulk registrieren, aber nicht mehrere Schnittstellen ist mein Verständnis. Zumindest in Castle, Ninject, Strukturkarte und Tinyioc. Ich habe keine Einheit benutzt. –

Antwort

0

Ich fand die Lösung für diese qn. Mit Unity können wir Karte direkt alle Klassen Schnittstellen respecive von

container.RegisterTypes(AllClasses.FromLoadedAssemblies(), WithMappings.FromMatchingInterface, WithName.Default); 

Hier verwenden, Unity Karten durch Konvention, wo sie wie diese Karte

DutyManager: IDutyManager 
UserDetailManager:IUserDetailManager 
1

Sie müssen irgendwann jeden von ihnen registrieren. Wenn Sie jedoch nicht jede einzelne von ihnen manuell ausführen möchten, können Sie "im Grunde genommen" die Baugruppe laden, über jede Schnittstelle iterieren und überprüfen, wie viele Klassen diese Schnittstelle implementieren, falls vorhanden Nur eine, registrieren Sie die Schnittstelle zu dieser Klasse als unbenannte Registrierung.

Warum nicht benannt? Nun, die benannte Registrierung ist nutzlos, es sei denn, Sie verwenden den Namen tatsächlich in der Registrierung oder im ResolvedParameter Konstruktor, und da Sie die Registrierungen nicht "handcraften", würden Sie höchstwahrscheinlich nicht auf sie verweisen.

Vergessen Sie nicht, dass in Ihrem Fall, da die Schnittstelle und die Klassen Generika sind, müssen Sie auch die ParameterType überprüfen.

Verwandte Themen