zoukankan      html  css  js  c++  java
  • 依赖注入

    1、什么是依赖注入(DI)

    依赖:当一个类需要另一个类协助来完成工作的时候就产生依赖,这个在开发过程中十分常见,如下图所示,这是一个依赖于抽象的例子。

    注入:我们只使用依赖项,不负责创建依赖项,依赖由别人注入的过程,我们看例子,由调用者将依赖项传入。

    public AccountController(ILoginService<ApplicationUser> loginService)
    {
      _loginService = loginService;
    }

    setter注入构造注入两种。上面例子就是构造注入,官方推荐构造函数注入。

    控制反转(IOC):为了在业务变化的时候尽少的因修改代码造成的问题。

    容器:统一管理系统中所有的依赖,负责绑定服务个实例之间的关系和获取实例,并对实例进行管理。

    2、Dotnet core依赖注入(DI)

    在.NET Core中DI的核心分为两个组件:IServiceCollection和 IServiceProvider。
    • IServiceCollection 负责注册
    • IServiceProvider 负责提供实例

     通过默认的 ServiceCollection注册(在Microsoft.Extensions.DependencyInjection命名空间下)有三个方法:

    var serviceCollection = new ServiceCollection()

      .AddTransient<ILoginService, LoginService>()
      .AddSingleton<ILoginService, LoginService>()
      .AddScoped<ILoginService, LoginService>();

    这个三分方法有不同的生命周期

    • Transient: 每一次GetService都会创建一个新的实例
    • Scoped:  在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request级别只创建一个实例,同一个http request会在一个 scope内)*
    • Singleton :整个应用程序生命周期以内只创建一个实例 

    如何替换为其他的IOC容器

    Autofac是个不错的选择,.NET Core默认的实现对于一些小型的项目完全够用,甚至大型项目麻烦点也能用,但是会有些麻烦,原因在于只提供了最基本的AddXXXX方法来绑定实例关系,需要一个一个的添加。如果项目可能要添加好几百行这样的方法。

  • 相关阅读:
    【转】Android listview与adapter用法
    【转】 Android Fragment 真正的完全解析(下)
    Jupyter Notebook 基本使用
    斯坦福CS231n学习--初识
    MatConvNet 练习使用CNN
    数据库系统学习(四)- 关系模型之关系代数
    操作系统学习(一)--概述启动过程
    数据库系统学习(三)- 关系模型之基本概念
    数据库系统学习(二)- 基础模型
    数据库系统学习(一)-入门篇
  • 原文地址:https://www.cnblogs.com/MirZhai/p/10323565.html
Copyright © 2011-2022 走看看