0

我正在尝试向Func<string>TinyIoc 注册一个:

container.Register<Func<string>>(() => myObject.MyProperty); 

以及依赖于它的构造函数的类型:

MyDependentType(Func<string> function)

当我使用

container.Resolve<MyDependentType>()

一切都很好,但我无法注册第二个Func<string>,因为它无法解决。我猜这很模棱两可。没有抛出错误,但注入的 Func 是错误的。我尝试添加名称,但没有成功。

TinyIoc 真的支持这个吗?还是我必须将我的函数包装到对象中?喜欢策略模式?

4

2 回答 2

1

你是对的,多次映射同一类型是模棱两可的。没有 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...
    }
}
于 2018-02-09T15:51:19.413 回答
0

就像 NightOwl888 所说,那些 Func<> 对象是模棱两可的。最后我使用了工厂 lambda。

container.Register<IMyType>((c, o) => {
    var dep = c.Resolve<IDependentType>();
    return new MyConcreteClass(() => dep.DependantFunc);
});

这有点多,但现在我可以让 TinyIoc 解决我的依赖关系。我只需要创建工厂 lambda。

于 2018-02-12T18:11:18.277 回答