Asp.Net Core Options模式的知识总结

Options模式是Asp.Net Core中用于配置的一种模式,它利用了系统的依赖注入,并且还可以利用配置系统。它使我们可以采用依赖注入的方法直接使用绑定的一个POCO对象,这个POCO对象就叫做Options对象。也可以叫做配置对象。

Options模式中的核心对象如下:

IOptions<TOptins>:非具名,它代表了系统中同一种类的POCO配置对象。在系统中是singleton,应用级别的注入。

IOptionsSnapshot<TOptions>:具名,它用名称代表了某一个具体的配置对象。从名字可以看出它能实时的捕获到配置对象的变化。在系统中是Scope,请求级别的注入。

IOptionsFactory<TOptions>:工厂,创建TOptions的工厂。在系统中是Transient。即用即弃。

IOptionsMonitorCache<TOptinos>:缓存,工厂创建的对象会被放到缓存中。在系统中是Singleton,应用级别的注入。

OptionsManager<TOptions>

这个类是IOptinos和IOptionsSnapshot这两个接口的默认实现。

这个类的构造函数需要传入IOptionsFactory<TOptions>。随后,还会在内部自创建一个实现了IOptinsMonitorCache的对象(OptionsCache)。OptionsManager本身是用来提供TOptions实例的,它内部又依赖IOptionsFactory这个工厂对象来创建对象。factory创建好的对象放到它内部的自创建的这个缓存上面。以独占的方式来对Toptions对象进行缓存。

原理上,IOptions表示的是不具名对象,IOptionsSnapshot接口表示的具名对象,但是在他们两个的实现OptionsManager中都是调用的同一个方法,只不过Ioptions提供了一个空字符串来表示不具名。在OptionsManager内部最终会调用Get方法来获取TOptions对象.

IOptinsFactory

默认的实现是OptionsFactory。接口有一个Create方法,接受一个string name参数,OptionsFactory提供Toptions对象总的来说有两个过程,TOptions的实例化和TOptinos的初始化。实例化的过程就是直接new 了一个TOptions对象,因为在接口约束里面对TOptions有new()约束,所以可以直接new出来这个对象,而初始化的过程是由三个接口来提供实现的,这三个接口分别是

①IConfigureOptions<in TOptions>

②IConfigureNamedOptions<in TOptins>:IConfigureOptions<TOptions> 注:它继承了IConfigureOptions接口。

③IPostConfigureOptions<in Toptions>

初始化的顺序为先执行①和②,再执行③。

这三个接口是在Service.Configure<TOptions>(this IServiceCollection services,string name,Action<Toptions> configureOptions) where TOptions:class这个扩展方法中进行配置的,最终,会调用services.AddSingleton<IConfigureOptions<Toptions>>(new ConfigureNamedOptions<Toptions>(name,configureOptions));这个方法,注册一个应用级别的服务。ConfigureNamedOptions实现了IConfigureOptions和IConfigureNamedOptions这两个接口。

 

posted @ 2018-12-17 12:19  wall-ee  阅读(2519)  评论(1编辑  收藏  举报