2014-02-06 36 views
1

我正在使用Unity開發MVC4應用程序。我的架構就是這樣。使用Unity基於請求動態注入類

public interface IRepositoy<T> 
{ 
} 

public class DataRepository<T>:IRepository 
{ 
} 

基本上這裏T是模型。

話又說回來

public interface IModel 
{ 
//Property and methods 
} 

public class Mobile: IModel 

所有的模型類,從這個接口繼承。

現在團結我使用下面的語法

RegisterType<IRepository<Mobile>, DataRepository<Mobile>>(); 

,這裏是問題。

我希望這個「Mobile」類依賴於請求URL。說移動頁面是請求「移動」類將被注入,如果「相機」頁面被請求的相機對象將被注入。

我可以使用if-else來做到這一點。但我正在尋找更復雜的方式,這將使代碼更易於維護和強大。我是Unity和DI的新手,所以不知道最好的方法。

你能幫忙嗎?

回答

0

我想你是在錯誤地看待它。

所有你需要的是在這種情況下的產品控制器。您的基類實體是Product,然後您可以從模型中的類繼承像Mobile,Desktop或其他類似的東西。檢查EF繼承:

http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application

+0

是的,這正是我所做的。但我需要將繼承的類(移動,桌面)提供給產品控制器,以便它可以提供特定類型的請求。任何建議我該怎麼做? – user2580925

0

通過IoC研究依賴注入。基本上,你可以說我要型手機的IRepository注入到我的MobileController:

public MobileController(IRepository<Mobile> repo) {} 

但是,當我用我的PersonController,我希望有一個IRepository或類型的人:

public PersonController(IRepository<Person> repo) {} 

然後使用IoC,你可以註冊你所有的依賴關係。所以你可以說,如果一個控制器要求一個類型爲Mobile的IRepository,給它們一個Mobile類型的DataRepository,但是如果一個控制器要求一個類型爲Person的IRepository,則給它們一個Person類型的DataRepository。 Ninject和AutoFac是兩種流行的選擇。設置Ninject看起來像:

Bind<IRepository<Mobile>>().To<DataRepository<Mobile>>(); 
Bind<IRepository<Person>>().To<DataRepository<Person>>(); 

註冊Ninject在你的AppStart中,你很好去。

+0

感謝您的回答。但我的架構有點不同..什麼是通用控制器像 pulic ProductController(IRepository 回購){} 所以我想任何事情都可以做檢查URL來確定應該注入哪個模型。 – user2580925