ContainerBuilder
实现服务的注册和通过IServiceCollection
实现服务的注册的效果是一致的;使用ContainerBuilder
实现服务的注册的优势在于支持命名服务的注册 。也就是在服务注册的过程中,可以给服务起个名字,在服务解析的过程中,通过名称去解析到指定名称的接口的实现的对象 。
2.2.2 通过约定注册服务
服务引擎SilkyEngine
通过调用RegisterDependencies()
方法,使用ContainerBuilder
实现对约定的规范的服务进行注册 。
public void RegisterDependencies(ContainerBuilder containerBuilder){containerBuilder.RegisterInstance(this).As<IEngine>().SingleInstance();containerBuilder.RegisterInstance(_typeFinder).As<ITypeFinder>().SingleInstance();var dependencyRegistrars = _typeFinder.FindClassesOfType<IDependencyRegistrar>();var instances = dependencyRegistrars.Select(dependencyRegistrar => (IDependencyRegistrar)Activator.CreateInstance(dependencyRegistrar)).OrderBy(dependencyRegistrar => dependencyRegistrar.Order);foreach (var dependencyRegistrar in instances)dependencyRegistrar.Register(containerBuilder, _typeFinder);}
在上面的代码中,我们看到通过构建约定注册器(IDependencyRegistrar
)的实例,通过约定注册器实现指定服务的注册 。系统存在两个默认的约定注册器:
(1) DefaultDependencyRegistrar,该服务注册器可以实现对标识接口的服务注册;
A) 对继承ISingletonDependency
的类注册为单例;B) 对继承ITransientDependency
的类注册为瞬态;C) 对继承IScopedDependency
的类注册为范围;
(2) NamedServiceDependencyRegistrar 实现了对命名服务的注册;在某个类继承上述标识接口时,如果通过InjectNamedAttribute
特性对服务进行命名,那么该服务的将会被命名为该名称的服务,在解析该服务的时候,可以通过名称进行解析 。例如:
// 该服务将会被注册为范围的,并被命名为:DemoService,在服务解析过程中可以通过服务名 DemoService 解析到[InjectNamed("DemoService")]public class DemoService : IScopedDependency{}
- 服务引擎提供了多种判断服务是否注册以及服务解析方法;
- 服务引擎提供了获取指定的配置项的方法;
- 可以通过服务引擎获取类型查找器(
TypeFinder
)、服务配置器(Configuration
)、主机环境变量提供者(IHostEnvironment
)、以及主机名(HostName
)等信息 。
EngineContext.Current
获取服务引擎,并使用服务引擎提供的各个方法,例如:判断服务是否注册、解析服务、获取配置类、获取当前原因的主机名称、或是使用类型查找器(TypeFinder
)、服务配置器(Configuration
)、主机环境变量提供者(IHostEnvironment
)等 。提示在开发过程中,使用服务引擎的大部分场景是,在不方便实现对某个服务进行构造注入的场景下,通过服务引擎实现对某个服务解析,从而得到该服务的实例 。【Silky微服务框架之服务引擎】
推荐阅读
- 微信收藏文件删除怎么恢复(微信收藏文件不小心删除怎么恢复)
- 如何删除微信收藏的图片(微信已收藏的图片如何删除)
- 微信收藏怎么永久删除(微信收藏怎样永久删除)
- 微信中我的收藏里文件和粘贴怎么删除(微信收藏里怎么删除所有文件)
- 微信收藏怎么一键删除(微信收藏如何永久删除)
- SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截
- 微信我的收藏怎么删除(公安局能调取已删微信记录吗)
- 微信看一看收藏怎么删除(一键恢复微信收藏)
- 2021微信收藏如何全部删除(怎样全部删除微信收藏)
- Chrony时间同步服务