0

Ich habe Schnittstelle und Implementierungen A:IA und B:IA. Die B Implementierung hat eine Abhängigkeit von mit Konstruktor DI, so dass B.ctor(IA).IoC-Registrierung für Wrapper-Klasse

Die Absicht dieses Entwurfs ist, A mit B zu wickeln und sie austauschbar zu verwenden. A ist ein Adapter für eine Datenbank, und B ermöglicht das Zwischenspeichern dieser Daten.

ist auch abhängig von Anbieter Klassen in diesem System, so dass, wenn ich diese Anbieter registrieren möchte ich eine Instanz von B verwenden. Mein Objektgraph im Grunde sollte wie folgt aussehen:

new Provider(
    new B(
     new A(
      new DbContex("constr") 
     ) 
    ) 
) 

ich betrachtet habe mit einer Tagging-Schnittstelle, so dass IB:IA und B:IB, aber dann würde ich braucht auf IB auf meinem Provider abhängen statt IA, die nicht ideal wäre.

Ich habe auch überlegt, eine Fabrik für , die eine Instanz von B mit einer Instanz von A erstellt, aber das fühlt sich falsch an.

Also ich denke, ich bin auf der Suche nach einem Weg, um diese Registrierung mit dem Simple Injector IoC Container zu erreichen.

Beispielcode

public class A : IA 
{ 
    private readonly DbContext _context; 

    public A(DbContext context) 
    { 
     _context = context; 
    } 

    public T Get<T>() 
    { 
     // Do stuff to get and 
     // return value from database. 
    } 

    public void Set<T>(T value) 
    { 
     // Do stuff to set value 
     // in database. 
    } 
} 

Wrapper-Klasse:

public class B : IA 
{ 
    private readonly IA _adapter; 

    public B(IA adapter) 
    { 
     _adapter = adapter; 
    } 

    public T Get<T>() 
    { 
     // Do stuff to get and 
     // return value from cache 
     // or database adapter. 
    } 

    public void Set<T>(T value) 
    { 
     // Do stuff to set value 
     // in cache and database. 
    } 
} 

Consumer von IA:

public class Provider 
{ 
    private readonly IA _adapter; 

    public Provider(IA adapter) 
    { 
     _adapter = adapter; 
    } 
} 

Antwort

3

Was Sie suchen als decorator pattern bekannt ist.

Der Simple Injector bietet eine ausgezeichnete Unterstützung für die Anwendung von Dekorationsmitteln, wahrscheinlich die beste Unterstützung im Vergleich zu anderen gängigen IoC-Containern.

Hier können Sie alles über das Dekorator-Subsystem lesen: Aspect-Oriented Programming in der Dokumentation.

Für diesen Grundfall die erforderlichen Registrierungen sind einfach:

container.Register<IA, A>(); 
container.RegisterDecorator<IA, B>(); 

Und vergessen Sie nicht

+0

wunderbar ‚IA‘ im Ctor von B. zu setzen! Ich danke dir sehr :) – Ablue

Verwandte Themen