首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Func<>注册和解析TinyIoc

用Func<>注册和解析TinyIoc
EN

Stack Overflow用户
提问于 2018-02-09 15:06:53
回答 2查看 621关注 0票数 0

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

代码语言:javascript
复制
container.Register<Func<string>>(() => myObject.MyProperty); 

和具有构造函数的依赖于它的类型:

代码语言:javascript
复制
MyDependentType(Func<string> function)

当我用

代码语言:javascript
复制
container.Resolve<MyDependentType>()

这一切都很好,但是我不能注册第二个Func<string>,因为它无法被解析。我想这是一种矛盾。没有抛出错误,但注入的Func是错误的。我试着加名字,但没有成功。

TinyIoc真的支持这一点吗?还是必须将函数包装成对象?比如战略模式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-09 15:51:19

您说得对,多次映射同一类型是不明确的。没有DI容器能够处理这个问题,因为没有办法区分一个Func<string>和另一个Func<string>

也就是说,您的用法示例看起来非常不寻常。通常,如果您希望在另一个对象中包含一个属性,则可以注入该属性所属的对象,而不是Func<string>

代码语言:javascript
复制
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...
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-02-12 18:11:18

就像NightOwl888说的,那些Func<>对象是不明确的。最后我用了一个工厂的灯笼。

代码语言:javascript
复制
container.Register<IMyType>((c, o) => {
    var dep = c.Resolve<IDependentType>();
    return new MyConcreteClass(() => dep.DependantFunc);
});

这有点过分,但现在我可以让TinyIoc解决我的依赖关系了。我只需要创造出工厂的灯笼。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48708686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档