Microservice微服务Arch架构-OS系统.Net Core

ASP.NET CORE Dependency injectio

2019-04-29  本文已影响8人  夏天的夏秋天的天
Dependency injection

IOC(控制反转)是啥? 借助第三方来实现依赖关系之间的解耦
在原来A对象获取B对象时,由主动获取一个B对象,变为了ioc主动创建一个B对象给予A。造成了A对象由主动行为变为了被动行为,则称为控制反转。(A在获得依赖对象的过程被反转了)

DI(依赖注入)又是啥?
在IOC运行期间,动态的将某种依赖关系注入到对象中。

ioc

IOC 和 DI 都是描述的同一件事情,只是通过了不同的角度来看待这个过程。

在ASP.NET CORE中提供了DI容器
自带的DI容器中提供了三种方法,分别是三种不同的生命周期
1、Transient每次调用都是不同的实例,比如常用的Microsoft.Extensions.Options.IConfigureOptions<T>;

2、Scoped每次请求是同一个实例,如 Entity Framework contexts;

3、Singleton只有一个实例,如Microsoft.Extensions.Logging.ILogger<T>;

具体使用哪种,要根据具体情况而定;

1、比如我们一般的业务逻辑都是Transient,这个也是比较常用的;

2、Scoped相对用的比较少,当然也有很多业务逻辑也有用Scoped的;当然他的妙用肯定是每次请求一个实例,比如我们在系统中获取登录系统用户的Id,这时就可以用Scoped,不管在Service层或者Repository层等等,获取的都是同一个用户;

3、Singleton很多都是系统级别设计用单利,比如日志;


使用方式
class Startup

//在Startup类的ConfigureServices方法中设置注入
 public void ConfigureServices (IServiceCollection services) {
            services.AddTransient<IService, Service> ();
        }

//使用构造函数的方式获取实例
public class ServiceController : Controller {
        private readonly IService _service;
        public ServiceController ( IService service) {
            _service= service;
        }

此外还可以用其他的容器来替换自带的DI容器 如:Autofac

上一篇下一篇

猜你喜欢

热点阅读