我是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");
然而,它失败了。
答案 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。