美文网首页ASP.NET Core
ASP.NET Core 依赖注入

ASP.NET Core 依赖注入

作者: GongZH丶 | 来源:发表于2018-05-21 14:59 被阅读250次

    依赖注入

      一个类需要调用另外一个类就是依赖,比如A类中需要调用B类才能完成功能,就是A类依赖B类。

      通常完成一个功能(或者叫业务)会有很多很多的依赖关系(比如A类依赖B类)。当一个业务完成后,过一段时间因为需求修改了B类的代码,那因为这个业务代码有依赖关系,整个业务代码就都需要修改。

      面向接口编程,依赖于抽象,就可以解决这些太过耦合的依赖关系,也叫代码耦合。

      比如,写一个接口C,B类实现接口C,A类依赖接口C。以后还可以根据需要让D类、E类实现接口C。这时,A类需要调用B类时,就不用去new一个B类的实例了,而是通过构造函数或其他方式让外界把这两个依赖的实例传给你,把依赖的创建丢给其它人,自己只负责使用,其它人丢给你依赖的这个过程理解为注入。

      依赖的注入一般就是使用框架来配置了。比如,以后不需要B类的实例,需要E类的实例,因为E类实现了接口C,所以直接通过一些框架配置依赖注入把E类注入就可以了,不需要修改其他业务代码了。

    ASP.NET Core 依赖注入

      在.NET Core中依赖注入主要组件为IServiceCollection和 IServiceProvider。我理解的IServiceCollection和 IServiceProvider这两个是服务和容器。官方把需要注入的实例或实现称为服务(service)。

      NET Core DI (Denpendency Injection)为我们提供的实例生命周期包括三种:
      Transient: 每一次GetService都会创建一个新的实例
      Scoped: 在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request级别只创建一个实例,同一个http request会在一个 scope内)
      Singleton :整个应用程序生命周期以内只创建一个实例

    依赖注入在ASP.NET Core中的使用

    1、在Startup类中配置
      ASP.NET Core可以在Startup.cs的 ConfigureService中配置DI, 组件为IServiceCollection。
    使用这个组件进行配置添加需要注入的服务。

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<IMyService, MyService>();
        services.AddMvc();//组件已经提供了一些实例的绑定,AddMvc就是Mvc Middleware在 IServiceCollection上添加的扩展方法。
    )
    

    AddTransient<IMyService,MyService>中的第一个参数表示要从容器中请求的类型(一般是一个接口),第二个参数表示将由容器实例化并用于满足此类请求的具体类型。 简单的说,第一个参数是接口,第二个参数是接口的实现。

    2、在Controller中使用
      可以通过构造函数或者属性来实现注入,官方推荐通过构造函数。这也是所谓的显式依赖。

    private IMyService<User> _myservice;
    public HomeController(IMyService service)
    {
      _myservice = service;
    }
    

    相关文章

      网友评论

        本文标题:ASP.NET Core 依赖注入

        本文链接:https://www.haomeiwen.com/subject/ygupdftx.html