0
我在爲我的類編寫有效配置時遇到了問題。 假設我有:如何使用直接類結構映射強制
interface IA{}
class abstract A : IA {}
class A1 : A, IA
{
private readonly IB _ib;
public A1(IB ib)
{
_ib = ib;
}
}
class A2 : A, IA
{
private readonly IB _ib;
public A1(IB ib)
{
_ib = ib;
}
}
我要注入這個班給他人的構造函數,我認爲我有沒有問題,通過這樣的事情這樣做:
For<IEnumerable<IA>>.Use(x => x.AllInstances<A>());
但我不知道要解決財產ib的問題,如果我想爲類A1和類A2使用不同的_ib。
interface B{}
class B1 : B {}
class B2 : B {}
我知道,如果我只有一類像B和類像AI可以簡單地做這樣的事情:
For<IA>().Use<ASample>().CTor<IB>().Is<BSample>();
但與我的問題我嘗試使用這樣的:
For<IA>().ConditionallyUse(c => { c.If(t => t.ConcreteType == typeof(A1))
.ThenIt
.Is.ConstructedBy(by => new A1(by.InstanceOf<B1>()));
c.If(t => t.ConcreteType == typeof(A1))
.ThenIt
.Is.ConstructedBy(by => new A2(by.InstanceOf<B2>()));
});
但它給我的雙向註冊的錯誤..
或者,也許我應該考慮大約是這樣的:
For<IEnumerable<IA>>.Use(x => x.AllInstances<A>());
For<IEnumerable<IB>>.Use(x => x.AllInstances<B>());
但這種變異我應該創建一個抽象類,並使用從列表中只有一個注入屬性附加的方法(這與接口B繼承的類)。
如果有人可以幫助我,我將非常感激!