asp.net-mvc - 在Using block 中注入(inject)UnitOfWork

标签 asp.net-mvc design-patterns ninject repository-pattern unit-of-work

我从事 UnitOfWork/Repository/MVC 应用程序的工作。现在一切都很好,我想将 UnitOfWork 与 Controller 分离。一种方法是在 Controller 的构造函数中注入(inject) Ninject(或其他)的依赖项。但是,这意味着 UnitOfWork 将与 Controller 同时实例化。

我想要使用 UnitOfWork 的方式是像这样使用 block :

using(var unitOfWork = new IUnitOfWork)
{
    return unitOfWork.GetRepository<IEmployeesRepository>().GetAllEmployees();
}

显然你不能实例化一个接口(interface),你有一个实例化的实现,它是用依赖注入(inject)器注入(inject)的,但是我如何将它注入(inject)到 using 子句中?

我看到了属性注入(inject)和方法注入(inject),但我不确定如何使用它们来实现我的目标。

最佳答案

使用您在容器中注册的工厂:

public class UserController : Controller
{
    IUnitOfWorkFactory _factory;

    public UserController(IUnitOfWorkFactory factory)
    {
        _factory = factory;
    }

    public ActionResult DoSomething()
    {
        using(var unitOfWork = _factory.Create())
        {
            return unitOfWork.GetRepository<IEmployeesRepository>().GetAllEmployees();
        }
    }
}

恕我直言,最好抽象出 UoW 处理:http://blog.gauffin.org/2012/06/how-to-handle-transactions-in-asp-net-mvc3/

关于asp.net-mvc - 在Using block 中注入(inject)UnitOfWork,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13160898/

相关文章:

asp.net-mvc - 如何在 ASP.Net MVC 的 EditorTemplates 中显示一个 RadioButtons 组(3)

c# - 如何模仿 LabelFor 的 aspnet mvc 代码?

android - 动态 ListView - 设计模式

c# - 带有构造函数参数的最小起订量

c# - Ninject Rebind 在运行时,它可以用作功能切换吗?

c# - ASP.NET MVC : Why is `ToMvcHtmlString` not public?

javascript - MVC - Javascript 在 View 中如何工作?

c# - 自动属性验证

Java方法流程状态设计

wpf - MVVM - 控件与 View