【发布时间】:2013-10-26 00:09:35
【问题描述】:
我想注册一个类并让 IOC 容器隐式注册与该类关联的接口,而不是注册接口到类的绑定。我想知道是否有任何 IOC 容器可以做到这一点,尽管我特别需要 Unity 的答案。
为了明确我的目的,请注意:
public interface IFred
{
int Go();
}
public class Fred : IFred
{
public int Go()
{
return 1;
}
}
class Program
{
static void Main(string[] args)
{
UnityContainer container = new UnityContainer();
container.RegisterType<Fred>(); //contra-variant registration?
IFred foo = container.Resolve<IFred>(); //variant resolution?
}
}
在上面的示例中,我希望返回一个“Fred”实例,即使我没有显式注册 IFred 映射。
【问题讨论】:
-
+1 表示“反变量注册”,呵呵 :) ... 如果
Fred实现IFred、IDisposable和IEquatable<IFred>会发生什么? -
@Jeff:大概 IOC 容器按照默认规则运行,例如“如果只有一个接口则成功”或用户定义的规则,例如“选择与给定命名空间模式匹配的接口”。
-
知道了,我不知道您是否正在考虑围绕 Unity 或其他东西编写便利/包装方法。
-
您是否明确不在
Fred上实现IFred?不会有容器可以自动让您为您猜测接口。另一方面,有些容器允许您根据约定注册类型。例如,Castle Windows 允许您注册“程序集中的所有类作为服务第一个接口”(example)。然而,“第一个接口”是什么是未定义的。所以你宁愿不实现多个接口。 -
@Steven:我的错。不敢相信我没有注意到那个错误。固定。
标签: .net dependency-injection ioc-container