依赖注入

1.什么是依赖关系

依赖关系就是一个对象对另一个对象的依赖,没有这个对象就会出异常,如下代码

  public class MyDependency
  {
       public void Msg(string msg)
      {
           Console.WriteLine(msg);
      }
  }

   public class Test
  {
       private MyDependency myDependency = new MyDependency();

       public void ShowMsg()
      {
           myDependency.Msg("zxc");
      }
  }

Test 类依赖于 MyDependency 类 如果要使用不同实现替换MyDependency必须修改Test

2.如何解决依赖

依赖关系通过以下方式解决了这些问题,

1使用接口或基类将依赖抽象化

2在服务容器中注册依赖关系

3将服务注入到使用者的类的构造函数中,框架负责创建依赖关系的实例,并在不用的时候释放

//抽象为接口
public interface IMyDependency
{
   void WriteMessage(string message);
}
//继承
public class MyDependency : IMyDependency
{
   public void WriteMessage(string message)
  {
       Console.WriteLine($"MyDependency.WriteMessage Message: {message}");
  }
}
//注册服务
public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<IMyDependency, MyDependency>();
    services.AddControllersWithViews();
}
//构造函数注入
public class Test
  {
       private IMyDependency myDependency;

       public Test(IMyDependency myDependency)
      {
           this.myDependency = myDependency;
      }
       public void ShowMsg()
      {
           myDependency.Msg("zxc");
      }
  }

 

原文地址:https://www.cnblogs.com/xianchengzhang/p/14094695.html