我正在尝试向Func<string>注册一个TinyIoc。
container.Register<Func<string>>(() => myObject.MyProperty); 和具有构造函数的依赖于它的类型:
MyDependentType(Func<string> function)当我用
container.Resolve<MyDependentType>()这一切都很好,但是我不能注册第二个Func<string>,因为它无法被解析。我想这是一种矛盾。没有抛出错误,但注入的Func是错误的。我试着加名字,但没有成功。
TinyIoc真的支持这一点吗?还是必须将函数包装成对象?比如战略模式?
发布于 2018-02-09 15:51:19
您说得对,多次映射同一类型是不明确的。没有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-12 18:11:18
就像NightOwl888说的,那些Func<>对象是不明确的。最后我用了一个工厂的灯笼。
container.Register<IMyType>((c, o) => {
var dep = c.Resolve<IDependentType>();
return new MyConcreteClass(() => dep.DependantFunc);
});这有点过分,但现在我可以让TinyIoc解决我的依赖关系了。我只需要创造出工厂的灯笼。
https://stackoverflow.com/questions/48708686
复制相似问题