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;
}
}
wunderbar ‚IA‘ im Ctor von B. zu setzen! Ich danke dir sehr :) – Ablue