在Controller Constructor中传递接口或类以进行依赖项注入

时间:2017-06-11 07:16:08

标签: c# asp.net-mvc dependency-injection autofac

我的控制器看起来像吼叫。但我不知道何时传递接口以及何时在构造函数中传递类。或者它真的重要吗?我搜索但没有得到答案。

public class MyController
    {
      private readonly IMyService _myService;
      public MyController(IMyService myService)
      {
        _myService=myService;
      }
    }

public class MyController
    {
      private readonly IMyService _myService;
      public MyController(MyService myService)
      {
        _myService=myService;
      }
    }

我的依赖注入就像

    builder.RegisterType<MyService>().As<IMyService>().InstancePerLifetimeScope();

2 个答案:

答案 0 :(得分:2)

public class MyController
    {
      private readonly IMyService _myService;
      public MyController(IMyService myService)
      {
        _myService=myService;
      }
    }

更好,因为它允许您以不同方式实现IMyService而无需触摸MyController。

答案 1 :(得分:2)

您总是需要在构造函数中传递接口(您的第一个实现)。如果您将在构造函数中传递类,那么依赖注入没有任何好处,因为您已经告诉构造函数哪个类正在实现此接口和此代码行

 builder.RegisterType<MyService>().As<IMyService>().InstancePerLifetimeScope();

将是无用的。依赖注入是用于在运行时绑定您的接口及其实现而不是编译时的东西。

PS:始终使用您的第一个实现。由于它是广泛的概念,我无法在此解释所有内容(尝试在网上搜索)