簡體   English   中英

向TinyIoc注冊並解析Func <>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM