我對Unity和IoC稍微陌生,但對MVC不太熟悉。我一直在閱讀和閱讀關於在MVC中使用Unity以及我一直看到的唯一真正有用的東西是能夠使用控制器獲得免費的DI。MVC中的Unity DI有什麼好處?
要從此進入:
public HomeController() : this(new UserRepository())
{
}
public HomeController(IUserRepository userRepository)
{
this.UserRepository = userRepository;
}
要這樣:
public HomeController(IUserRepository userRepository)
{
this.UserRepository = userRepository;
}
基本上,讓我砸無參數的構造函數。這真是太好了,所有這一切我都會實現,但是對於所有關於IoC庫的大肆宣傳來說,這似乎並不是什麼好事。將Unity用作服務定位器的方式聽起來很有吸引力,但很多人會認爲它是一種反模式。
所以我的問題是,有了服務定位問題和一些視圖和過濾器DI機會,還有什麼我從使用Unity獲得?我只是想確保我不會錯過像所有類構造函數一樣的免費DI支持。
編輯:
我理解其背後使用Unity DI與MVC控制器可測性的目的。但我所要做的只是添加一個額外的小構造函數,nix Unity,並且我可以將UnitTest完全一樣。當替代品更簡單時,註冊存儲庫類型和使用定製控制器工廠的好處在哪裏?替代方案是原生DI。我想我真的很想知道除了服務定位之外,Unity(或任何IoC庫)的優點是什麼,這很糟糕。自由控制器DI真的是我從Unity獲得的唯一東西嗎?
但@Tim,我所要做的就是添加一個額外的小構造函數,nix Unity,並且我可以將UnitTest完全一樣。當替代品更簡單時,註冊存儲庫類型和使用定製控制器工廠的好處在哪裏? – Levitikon