zoukankan      html  css  js  c++  java
  • net core 依懒注入 中间件

    依懒注入

      依懒

     当一个类需要另一个类协作来完成工作的时候就产生了依。比如我们在AccountController这个控制器需要完成和用户相关的注册、登录 等事情。其中的登录我们由EF结合Idnetity来完成,所以我们封装了一个EFLoginService。这里AccountController就有一个ILoginService的依

    这里有一个设计原则:依于抽象,而不是具体的实现。所以我们给EFLoginService定义了一个接口,抽象了LoginService的行为。

    注入

    注入体现的是一个IOC(控制反转的的思想)

    控制反转

    为了在业务变化的时候尽少改动代码可能造成的问题。
    比如我们现在要把从EF中去验证登录改为从Redis去读,于是我们加了一个 RedisLoginService。这个时候我们只需要在原来注入的地方改一下就可以了。

    NetCore依懒注入

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

    不在构造函数获取依赖注入

      这个需求很常见。就比如我一个静态类 或者就不想在构造函数里面获取

      加一个全局的自己的容器

    public class ServiceContainer
        {
            private static IServiceProvider serviceProvider { get; set; }
    
            public static IServiceProvider ServiceProvider
            {
                set { serviceProvider = value; }
            }
    
            public static T GetService<T>() where T : class
            {
                var scope = serviceProvider.CreateScope();
                return scope.ServiceProvider.GetRequiredService<T>();
            }
        }

     程序启动把服务都放到这个里面去

    public class Program
        {
            public static void Main(string[] args)
            {
                var hosts = BuildWebHost(args);
                ServiceContainer.ServiceProvider = hosts.Services;
                hosts.Run();
            }
    
            public static IWebHost BuildWebHost(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>()
                    .Build();
        }

     使用

    var transitionService = ServiceContainer.GetService<ITransitionService>();
  • 相关阅读:
    银行数仓主题划份
    Halcon 图像的算术运算(crop_part,invert_image,scale_image)
    Halcon 图像截取 crop_part
    Halcon 算子 threshold
    Halcon 图片读取以及图像转换
    Lens shading correction 的四种方法
    Micro-Manage/ImageJ软件使用技巧快问快答
    Micro-Manager基本操作指南(下)
    Micro-Manager基本操作指南(上)
    MATLAB 配置 Micro-Manager
  • 原文地址:https://www.cnblogs.com/zhaops/p/10718838.html
Copyright © 2011-2022 走看看