依赖注入在asp.net mvc中的两层

Pat*_*ick 2 c# dependency-injection asp.net-mvc-3

我正试图通过DI和IoC获得越来越多的熟悉.此时我理解了在MVC应用程序中使用控制器的DI的概念和实现.但假设我有一个分层应用程序.控制器调用businesslogic类,businesslogic子句调用存储库类.

如何使用DI设置第二层,即businesslogic到存储库部分.这确保了我可以在我的应用程序中的不同级别进行测试 我不想做的是从控制器将依赖性传递给存储库.

希望有人能给出一些暗示.

帕特里克

Tx3*_*Tx3 7

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

组态

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

// services
base.Bind<IMyServices>().To<MyServices>();
Run Code Online (Sandbox Code Playgroud)

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

调节器

public class MyController : Controller
{
    private readonly IMyServices _myServices;

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

    // your actions
} 
Run Code Online (Sandbox Code Playgroud)

再次,里面MyService有一个类似的模式(构造函数注入)

服务

public class MyServices : IMyServices
{
    private readonly IMyRepository _myRepository;

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

    public void Example()
    {
        _myRepository.PleaseDoSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

还要记住ASP.NET MVC中还有很多其他东西可以使用IoC:

  • 本土化
  • 授权
  • 模型元数据提供程序(例如本地化错误消息)
  • 自定义模型粘合剂
  • 控制器工厂
  • 等等

更新

在示例代码中有一个错误.服务中没有进行依赖注入.现在它应该是正确的.

更新2

我认为强烈建议使用NuGet包来引导你的应用程序.节省时间,可能会应用一些"最佳实践",其他项目将获得类似的基础等.以下是不同IoC + MVC 3的一些说明