接口继承与Unity解析
Interface inheritance and Unity resolve
我正在尝试使用 Unity 通过它的 base 接口解析一个对象。如果我有以下接口和 classes:
interface IFoo { }
interface IBar : IFoo { }
class MyBar : IBar { }
我想像这样将 MyBar
注入多个 classes:
class DoSomething
{
public DoSomething(IFoo myBar)
{
// Execute a method from IFoo implementation
}
}
class DoSomethingElse
{
public DoSomethingElse(IBar myBar)
{
// Execute a method from IBar **AND** IFoo implementation
}
}
如果我这样注册 MyBar
:
container.RegisterType<IBar, MyBar>();
Unity 在尝试解决 IFoo
时抛出错误(请参阅 DoSomething 构造函数)。但是 IBar
继承自 IFoo
?
我可以像这样用容器注册 MyBar
两次:
container.RegisterType<IFoo, MyBar>();
container.RegisterType<IBar, MyBar>();
但感觉我不应该这样做。我这里可能是错的。
所以我的问题是 Unity 是否可以从其基本界面解析 class?
基本上,DI 容器会尝试通过某种映射来创建接口实例。所以当你写
container.RegisterType<IBar, MyBar>();
container
知道,每当我被要求为 IBar
创建一些实例时,我都会通过实例化 MyBar
.
来解决该调用
然而,容器不知道在请求 IFoo
实例时该怎么做,因为并非每个 IFoo
都是 IBar
。那么写这个应该返回什么:
container.GetInstance<IFoo>();
在您的情况下,只有一种类型是可能的,IBar
反过来也只有一种类型是可能的。然而,这与接口的目的相矛盾,因为事实上它总是局限于一种特定类型,而它应该与实现该接口的 any 类型一起工作。
这就是为什么您必须确定两个接口的映射。
我正在尝试使用 Unity 通过它的 base 接口解析一个对象。如果我有以下接口和 classes:
interface IFoo { }
interface IBar : IFoo { }
class MyBar : IBar { }
我想像这样将 MyBar
注入多个 classes:
class DoSomething
{
public DoSomething(IFoo myBar)
{
// Execute a method from IFoo implementation
}
}
class DoSomethingElse
{
public DoSomethingElse(IBar myBar)
{
// Execute a method from IBar **AND** IFoo implementation
}
}
如果我这样注册 MyBar
:
container.RegisterType<IBar, MyBar>();
Unity 在尝试解决 IFoo
时抛出错误(请参阅 DoSomething 构造函数)。但是 IBar
继承自 IFoo
?
我可以像这样用容器注册 MyBar
两次:
container.RegisterType<IFoo, MyBar>();
container.RegisterType<IBar, MyBar>();
但感觉我不应该这样做。我这里可能是错的。
所以我的问题是 Unity 是否可以从其基本界面解析 class?
基本上,DI 容器会尝试通过某种映射来创建接口实例。所以当你写
container.RegisterType<IBar, MyBar>();
container
知道,每当我被要求为 IBar
创建一些实例时,我都会通过实例化 MyBar
.
然而,容器不知道在请求 IFoo
实例时该怎么做,因为并非每个 IFoo
都是 IBar
。那么写这个应该返回什么:
container.GetInstance<IFoo>();
在您的情况下,只有一种类型是可能的,IBar
反过来也只有一种类型是可能的。然而,这与接口的目的相矛盾,因为事实上它总是局限于一种特定类型,而它应该与实现该接口的 any 类型一起工作。
这就是为什么您必须确定两个接口的映射。