2011-11-03 55 views
3

我繼承了一些代碼與自定義DI容器(需要移動到統一),這是基於屬性的像MEF 例如,統一擴展

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

想知道是否已經有一個統一的擴展,我可以使用或可能幫助建立一個?

+0

[服務]和注射服務一樣。 –

回答

2

不清楚[SERVICE]應該啓用什麼行爲。所以我猜:

開箱即用Unity支持Injection Attributes不同形式的依賴注入。你也可以做Attribute-Driven Policies方法攔截。

如果您可以靈活地更改注入的方式:首選模式是使用構造函數注入而不是屬性或服務定位器。它允許您從類中刪除對Unity的所有引用......這意味着您可以在不更改代碼的情況下再次更改容器。見Service Locator is an Anti-Pattern

1

如果該SERVICEAttribute標記爲由容器注入的屬性,則不僅僅是搜索替換整個代碼庫並將[SERVICE]替換爲[Dependency]。

DependencyAttribute是Unity爲依賴注入標記屬性的方法。

我同意ErnieL的說法,但是使用屬性是依賴注入領域的代碼氣味。使用該屬性是爲了允許將代碼移動到Unity,但不要使用[Dependency]代替您編寫的任何新代碼,並且在重構舊代碼時將其刪除。