我们应该实例化数据上下文吗?控制器中的存储库?

时间:2010-06-30 13:32:45

标签: c# asp.net-mvc

我有一个ObjectContext和一个传递给ObjectContext的Repository。然后我使用存储库进行调用。我想使用依赖注入来不必总是实例化ObjectContext和Repository。我将上下文/存储库分组到什么“对象”?

using (MOSContext db = new MOSContext())
{
    IUserRepository users = new UserRepository(db);

    // Do stuff with users.
}

这样做不好吗?理想情况下,我希望能够创建像ObjectContext一样的“某个对象”,但是具有所有存储库接口的访问权限:

using (IDAL dal = IoC.Resolve<IDal>())
{
    dal.Users.GetById(myId);
    dal.Profiles.Add(new Profile());
}

然后使用DI,我可以为每个存储库接口注册上下文和所有实现。

1 个答案:

答案 0 :(得分:1)

是的,在控制器中新建OC是不好的。是的,最好使用DI来返回不严格依赖于EF的接口实例。

每个请求应该有一个OC 的实例,而不是每个方法。大多数DI容器都具有开箱即用的请求范围生命周期功能。