zoukankan      html  css  js  c++  java
  • .NET Core IOC AOP

    IOC简介

    IOC思想

    把类当做组件或服务来看待,组件内一定要高内聚,组件之间一定要低耦合,既然要保持低耦合,那就一定不要轻易的去new什么对象。
    那组件之间的交互怎么处理呢?那最好的方式就是把new的操作交给第三方的治理框架去做,
    比如往大处说的“Dubbo”, Spring Cloud(服务注册,服务发现,服务自动下线,流量分配,熔断,降级),往小处说就是IOC容器

    把类往大处想。

    把治理框架往小处想。。

    IOC能做到那些

    1. 对接口和实现类实现了由原来的零散式管理到现在的集中化管理。 (集中化日志,集中化配置系统 etcd,zookeeper)

    new

    业务驱动 IOC
    产品驱动

    2. 对类之间,类接口之间的关联关系可以采用多种模式注入(构造器注入,属性注入)等等。

    3. 对实现类的生命周期进行了统一管理,能够控制服务的创建,释放和监控。

    4. 对类的依赖由编译时推迟到了运行时。

    new

    .NET Core中IOC

    NUGet 包 Microsoft.Extensions.DependencyInjection

    Microsoft.Extensions.DependencyInjection.Abstractions(扩展)

                //IOC容器
                ServiceCollection services = new ServiceCollection();
                //注册服务  每次调用都创建新的类
                services.AddTransient<IUserCQRS, UserCQRS>();
    
    
                ////注册服务   只new一次
                //services.AddSingleton<IUserCQRS, UserCQRS>();
    
    
                //在某个作用于中就是一个单利
                services.AddScoped<IUserCommand, UserCommand>();
    
                //服务提供者
                var serviceProvider = services.BuildServiceProvider();
                var userQCRSImp = serviceProvider.GetService<IUserCQRS>();
                Console.WriteLine(userQCRSImp.GetUserName("lalala"));
    
    
                //创建作用域  usercommand1  usercommand2 同一个实例        usercommand4  usercommand3 同一个实例
                var scope1 = serviceProvider.CreateScope();
                var usercommand1= scope1.ServiceProvider.GetService<IUserCommand>();
                var usercommand2 = scope1.ServiceProvider.GetService<IUserCommand>();
    
                var scope2 = serviceProvider.CreateScope();
                var usercommand3 = scope2.ServiceProvider.GetService<IUserCommand>();
                var usercommand4 = scope2.ServiceProvider.GetService<IUserCommand>();
    • Transient: 每一次GetService都会创建一个新的实例
    • Scoped:  在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request级别只创建一个实例,同一个http request会在一个 scope内)(可以手动创建多个作用域)
    • Singleton :整个应用程序生命周期以内只创建一个实例 
    AOP介绍

    AOP思想

     我们知道AOP是面向切面编程,很好的解决了系统级的功能和业务功能的耦合问题。。。

    .NETCore AOP实现

    nuget包  AspectCore.Extensions.DependencyInjection    对应github地址:https://github.com/dotnetcore/AspectCore-Framework   源码中有帮助文档

    他也是基于IOC容器的。

    代码下载

    代码下载

    第三方的IOC容器都是继承了 public interface IServiceProviderFactory<TContainerBuilder>

  • 相关阅读:
    数据结构 【实验 串的基本操作】
    Ioc容器依赖注入-Spring 源码系列(2)
    定时任务管理中心(dubbo+spring)-我们到底能走多远系列47
    jvm内存增长问题排查简例
    Ioc容器beanDefinition-Spring 源码系列(1)
    SPI机制
    java工厂-积木系列
    java单例-积木系列
    利用spring AOP 和注解实现方法中查cache-我们到底能走多远系列(46)
    java 静态代理-积木系列
  • 原文地址:https://www.cnblogs.com/wudequn/p/10101388.html
Copyright © 2011-2022 走看看