[英]Register and Resolve a Func<> with TinyIoc
我正在嘗試向TinyIoc注冊Func<string>
:
container.Register<Func<string>>(() => myObject.MyProperty);
以及依賴於它的類型與構造函數:
MyDependentType(Func<string> function)
當我使用
container.Resolve<MyDependentType>()
一切都很好,但是我無法注冊第二個Func<string>
因為它無法解析。 我猜這很模棱兩可。 沒有引發任何錯誤,但是注入的Func是錯誤的。 我試圖添加名稱,但沒有成功。
TinyIoc真的支持嗎? 還是我必須將函數包裝到對象中? 喜歡策略模式嗎?
沒錯,多次映射同一類型是不明確的。 DI容器無法處理此問題,因為無法將一個Func<string>
與另一個Func<string>
。
也就是說,您的用法示例似乎真的很不尋常。 通常,如果要在另一個對象內添加屬性,則可以注入該屬性所屬的對象,而不是Func<string>
。
class MyObject : IMyObject
{
public string MyProperty { get { return "foo"; } }
}
class MyDependentType : IMyDependentType
{
private readonly IMyObject myObject;
public MyDependentType(IMyObject myObject)
{
this.myObject = myObject;
}
public void DoSomething()
{
var myProperty = this.myObject.MyProperty;
// do something with myProperty...
}
}
就像NightOwl888所說的那樣,那些Func <>對象是模棱兩可的。 最后,我使用了工廠lambda。
container.Register<IMyType>((c, o) => {
var dep = c.Resolve<IDependentType>();
return new MyConcreteClass(() => dep.DependantFunc);
});
有點多,但是現在我可以讓TinyIoc解決我的依賴關系了。 我只需要創建工廠lambda。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.