c# - asp.net mvc中的两层依赖注入(inject)

标签 c# asp.net-mvc-3 dependency-injection

我正在尝试越来越熟悉 DI 和 IoC。此时此刻,我了解了 DI 在 MVC 应用程序中使用 Controller 的概念和实现。但假设我有一个分层应用程序。 Controller 调用业务逻辑类,业务逻辑类调用存储库类。

我如何设置第二层,业务逻辑到存储库部分与 DI。这确保我可以在应用程序的不同级别上进行测试。我不想做的是将依赖项从 Controller 传递到存储库。

希望有人能给出一些提示。

帕特里克

最佳答案

如何使用 Ninject 实现的简约示例.这不是关于 DI/IoC 的绝对真理,只是一个可以如何完成的简短示例。

配置

// repositories
base.Bind<IMyRepository>().To<MyRepository>();

// services
base.Bind<IMyServices>().To<MyServices>();

当使用 IMyRepository 时,它将使用具体实现 MyRepository

Controller

public class MyController : Controller
{
    private readonly IMyServices _myServices;

    public AnimalController(IMyServices myServices)
    {
        _myServices = myServices;
    }

    // your actions
} 

同样,在 MyService 中有一个类似的模式(构造函数注入(inject))

服务

public class MyServices : IMyServices
{
    private readonly IMyRepository _myRepository;

    public MyServices(IMyRepository myRepository)
    {
        _myRepository = myRepository;
    }

    public void Example()
    {
        _myRepository.PleaseDoSomething();
    }
}

还要记住,在 ASP.NET MVC 中还有许多其他可以使用 IoC 的地方:

  • 本地化
  • 授权
  • 模型元数据提供者(例如本地化错误消息)
  • 自定义模型 Binder
  • Controller 工厂
  • 等等

更新

示例代码中存在错误。服务中没有进行依赖注入(inject)。现在它应该是正确的。

更新 2

我认为强烈建议使用 NuGet 包来引导您的应用程序。节省时间,可能会应用一些“最佳实践”,其他项目将获得类似的基础等。这里有一些针对不同 IoC + MVC 3 的说明

关于c# - asp.net mvc中的两层依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9531997/

相关文章:

c# - IoC/DI 容器、工厂和运行时类型创建

c# - 单击失败,因为元素不可见

c# - 如何覆盖常量派生类?

javascript - 注入(inject) Controller 时服务未定义

asp.net-mvc - 如何在MVC3中为多行文本框创建多个编辑器模板?

asp.net-mvc - 如何将默认打开页面设置为区域的操作

.net - Fluent IOC 配置/模块的最佳位置(目前正在尝试 Ninject)

c# - 在独立的 C# 类中存储 Javascript/JQuery

c# - 带有自定义 header 的 Windows Phone 8 Http 请求

asp.net - MVC 未检测到我的自定义 httpModule