.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>

原文地址:https://www.cnblogs.com/wudequn/p/10101388.html