2017-10-16 2 views
0

Ich möchte nur fragen, ob es eine Möglichkeit gibt, Abhängigkeiten auf einfachste Weise mit der Einheit zu registrieren.Registerabhängigkeit Unity

public class Module : IModule 
    { 
     IUnityContainer _container; 
     IRegionManager _regionManager; 

    public Module (IUnityContainer container, IRegionManager regionManager) 
    { 
     _container = container; 
     _regionManager = regionManager; 
    } 

    public void initialize() 
    { 
     IRegion region = _regionManager.Regions[RegionNames.ContentRegion]; 
     _container.RegisterType<"InterfaceHERE", "CLASSHERE">(); 
    } 

Ich habe 30-40 Klassen und Schnittstellen, und ich möchte es nicht redundant codieren. Gibt es irgendwelche Möglichkeiten, es in der einfachsten Form zu kodieren? Wie alle Klassen bekommen und eine Schleife machen und registrieren?

Danke!

+0

Wenn Sie Service Locator Muster verwenden anstelle der tatsächlichen IoC dann können Sie rufen 'Resolve()' auf jeder Typ mit einem öffentlichen Konstruktor und Unity wird es finden, ohne es vorher zu registrieren. Hoffentlich verwenden Sie IoC. – Crowcoder

Antwort

1

Seit Unity 3.0 können Sie Ihre Implementierungen im Container unter Verwendung der Konvention registrieren. Bitte see the details here, der Code sieht wie folgt aus. Sie müssen angeben, welche Typen Sie automatisch registrieren möchten, wie (wählen Sie Mapping), entscheiden Sie sich für deren Namen und Lebensdauer.

using (var container = new UnityContainer()) 
{ 
    container.RegisterTypes(
    AllClasses.FromLoadedAssemblies(), 
    WithMapping.MatchingInterface, 
    WithName.Default, 
    WithLifetime.ContainerControlled); 
} 

Wenn Sie mit Unity 2.0, dann müssen Sie zusätzliche Pakete verwenden, finden Sie in der nuget UnityConfiguration. dieses Paket verwenden, können Sie für Implementierungen scannen und automatisch registrieren, wie unten, überprüfen Sie bitte die Projektdokumentation für Details:

public class FooRegistry : UnityRegistry 
{ 

    (...) 

    Scan(scan => 
    { 
      scan.AssembliesInBaseDirectory(); 
      scan.ForRegistries(); 
      scan.With<FirstInterfaceConvention>(); 
      scan.With<AddAllConvention>() 
       .TypesImplementing<IHaveManyImplementations>(); 
      scan.With<SetAllPropertiesConvention>().OfType<ILogger>(); 
      scan.ExcludeType<FooService>(); 
    }); 
} 
+0

Ich denke es ist für v3.5 und höher. Ich bin nur bei 2.0 –

+0

Ok, ich aktualisierte meine Antwort zu Unity 2.0 auch, viel Glück! Wenn mein Beitrag hilfreich ist, bitte markieren Sie ihn als Antwort, er wird anderen helfen. –

+0

nach der Installation der Unity-Konfiguration kann die RegisterTypes-Erweiterung immer noch nicht gefunden werden. :( –