注册并解决一个问题<>与TinyIoc



我试图用tinyioc注册Func<string>

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

和一种与构造函数有关的类型:

MyDependentType(Func<string> function)

当我使用

container.Resolve<MyDependentType>()

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

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&lt;>对象是模棱两可的。最后,我使用了工厂lambda。

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

有点多,但是现在我可以让tinyioc解决我的依赖性。我只需要创建工厂lambda。

相关内容

  • 没有找到相关文章

最新更新