繁体   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