所有IoC容器是相同的,他們有一些方法來註冊或發現依賴關係,然後解決參考的方式。大多數決議涉及要求參考FooClass
並獲得一個對象作爲回報。通常你並不真正要求具體的類型,如FooClass,而是要求IFooClass
,以便將你的使用與傳入的實際類型分開。
所以在你的情況下,你需要註冊你的EF數據上下文作爲統一的依賴。我之前沒有使用過統一,所以請原諒任何小錯誤。
container.RegisterType<YourContext, YourContext>();
給你的類添加一個依賴項。假設你有一個實現IFooRepository的FooRepository。
public FooRepository : IFooRepository
{
private YourContext context;
public FooRepository(YourDataContext context) {
this.context = context;
}
}
在MVC 3您註冊統一爲默認依賴解析器,這意味着用於控制器通過它被送到所有的請求;現在
protected void Application_Start()
{
...
var container = new UnityContainer();
container.RegisterType<YourContext, YourContext>();
container.RegisterType<IFooRepository, FooRepository>();
container.RegisterControllers();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
控制器可以添加參數到它的構造函數,並讓他們填充。
public class MyController : Controller
{
private IFooRepository repository;
public MyController(IFooRepository repository) {
this.repository = repository;
}
}
當這個控制器實例化它會收到IFooRepository的一個實例,將接收到YourContext參考。這一直貫穿整個鏈條。
編輯
的EDMX文件就是創建覆蓋下一個C#上下文類設計師。單擊曲面並查看屬性以查看類的名稱。
所以,你可以以完全相同的方式與任何其他類對其進行註冊。在這種情況下。
container.RegisterType<Model1Container, Model1Container>();
希望這會有所幫助。
嗨@Madcapnmckay感謝您的回答。我有一個問題,我不知道如何將我的edmx文件註冊爲container.registertype()。我爲我的所有IFooclass和Fooclass創建了這些container.registertype,但我不知道如何處理edmx表示。感謝您的幫助提前。 –
2012-03-07 02:30:43
@sebastian_h我編輯了包含更多細節的答案。 – madcapnmckay 2012-03-07 02:57:35
感謝您的編輯。我重新構建瞭解決方案,並在實體容器名稱中包含了該圖的名稱,但未被intellisense識別出來......我將檢查我是否做了其他錯誤,因爲我相信您的方法是正確的路徑,但我不知道爲什麼因爲我的解決方案無法正常工作..我會再試一次並寫信..非常感謝! – 2012-03-07 05:49:06