2016-07-19 89 views
9

我想將一個asp.net應用程序移植到asp.net核心。我的屬性注入(使用ninject)在我這樣的UnitOfWork實現上。在Asp.Net核心中的屬性注入

[Inject] 
public IOrderRepository OrderRepository { get; set; } 
[Inject] 
public ICustomerRepository CustomerRepository { get; set; } 

有沒有一種方法可以實現相同的功能,使用建立在.net核心的DI?也有可能使用基於約定的綁定?

+0

相關:https://stackoverflow.com/questions/39849142/when-to-use-property-injection – Steven

回答

10

不,內置的DI/IoC容器在使用和功能上都有意保持簡單,爲其他DI容器提供插件基礎。

因此,沒有內置的支持:自動發現,自動註冊,修飾器或注入器或基於約定的註冊。據我所知,目前還沒有計劃將其添加到內置容器中。

您將不得不使用具有屬性注入支持的第三方容器。

請注意,屬性注入在98%的情況下被認爲是不好的,因爲它隱藏了依賴關係,並且不能保證在創建類時注入對象。

使用構造函數注入,您可以通過構造函數強制執行此操作,並檢查null並且不創建該類的實例。有了屬性注入,這是不可能的,在單元測試期間,當它們沒有在構造函數中定義時,它不明確哪個類需要哪些服務/依賴項,因此很容易錯過並得到NullReferenceExceptions

我發現的物理注入的唯一有效原因是將服務注入由第三方庫生成的代理類中,即從無法控制對象創建的接口創建的WCF代理。

避免它無處不在其他。