0
我有接口IA
和實現A:IA
和B:IA
。 B
實現依賴IA
與構造函數DI,因此B.ctor(IA)
。包裝類的IoC註冊
此設計的目的是將A
與B
包裝在一起,並允許它們互換使用。 A
是數據庫的適配器,B
允許緩存該數據。
IA
也依賴於此係統中的提供者類,因此當我註冊這些提供者時,我想使用B
的實例。我的對象圖應該基本上如下所示:
new Provider(
new B(
new A(
new DbContex("constr")
)
)
)
我一直在使用的標記接口,這樣IB:IA
和B:IB
考慮,但我需要依靠IB
我的供應商,而不是IA
這不是很理想。
我也考慮過使用IA
的工廠,它使用A
的實例創建B
的實例,但感覺不對。
所以我想我正在尋找一些方法來完成使用simpleinjector IoC容器的註冊。
示例代碼
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.
}
}
包裝類:
消費者的IA
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.
}
}
:
public class Provider
{
private readonly IA _adapter;
public Provider(IA adapter)
{
_adapter = adapter;
}
}
奇妙的構造函數把「IA」!非常感謝 :) – Ablue