Unity扩展

时间:2011-11-03 14:30:45

标签: c# .net dependency-injection unity-container

我继承了一些带有自定义DI容器的代码(需要移动到统一),这是基于MEF的属性 e.g。

[SERVICE]
PUBLIC <interface> myVar { get; set ; }

想知道是否已经有一个我可以使用的统一扩展,或者是否可以帮助建立一个?

2 个答案:

答案 0 :(得分:2)

不清楚启用哪种行为[SERVICE]。所以我猜:

开箱即用Unity支持Injection Attributes用于不同形式的依赖注入。你也可以Attribute-Driven Policies进行方法拦截。

如果您可以灵活地更改注入的方式:首选模式是使用构造函数注入而不是属性或服务定位器。它允许您从类中删除对Unity的所有引用...这意味着您可以在不更改代码的情况下再次更改容器。请参阅Service Locator is an Anti-Pattern

答案 1 :(得分:1)

如果SERVICEAttribute标记了容器注入的属性,那么只需对整个代码库进行搜索替换,并将[SERVICE]替换为[Dependency]。

DependencyAttribute是Unity标记依赖注入属性的方法。

我同意ErnieL然而,属性的使用是依赖注入的代码味道。使用该属性以允许将代码移动到Unity,但不要将[Dependency]用于您编写的任何新代码,并在重构旧代码时将其删除。