为继承的接口配置Unity

时间:2010-03-10 14:39:57

标签: c# dependency-injection unity-container

我是Unity的新手,(好吧,IoC和DI),我在配置它时遇到了问题。

我有两个界面:

public interface ISample { ... }

public interface IDerivedSample : ISample { ... }

和许多类似于以下的concreate类:

public class UseSample : IDerivedSample { ... }

我正在尝试配置Unity以解决这些问题,如下所示:

public class UsesSample
{
    private ISample _sample;

    public UsesSample(ISample sample) 
    {
        _sample = sample;
    }
}

我尝试配置此功能失败了,所以我想我会问群众如何这样做。

修改

我已经将容器配置为按名称查找不同版本的接口,因此用于解析UserSample的结果代码应该类似于:

ISample = contianer.Resolve<ISample>("derived");

然而,它失败了。

1 个答案:

答案 0 :(得分:1)

简短回答

container.RegisterType<ISample, UseSample>();

答案越长

如果您只将一个映射从ISample注册到具体类,则上面的代码可以正常工作。在我阅读您的问题时,您有许多 ISample的实现,在这种情况下会出现 ambiquity ,因为UsesSample没有提供如何选择的提示一个合适的ISample实例。

这种难题有几种方法可以解决。有些是特定于DI容器(在本例中为Unity),而其他则通过创建不那么模糊的API设计来解决问题。

例如,您可以使用Abstract Factory to select a dependency based on a run-time value