回到目录
进行dotnetcore之后,各种对象都是基于DI进行生产的,这就有了对象的生命周期一说,早在autofac里也有相关知识点,这与Microsoft.Extensions.DependencyInjection是完全温和的,方便大家理解,在讲今天的组件化之前,先对DI的三种生命周期进行理解一下:
AddSingleton:单例,进程内它是唯一的
AddTransient:瞬息,在对象在当前环境内,作用域内是唯一的
AddScoped:请求,对象在一个HTTP请求内是唯一的
下面来看今天的组件化的实现,比如我希望对nosql进行封装,在以后使用它时,直接在代码startup中进行注册,或者使用配置文件进行注册,我们就可以涉及这样一个扩展方法来实现对IServiceCollection扩展!
???/// <summary> ???/// nosql服务扩展 ???/// </summary> ???public static class NoSqlExtensions ???{ ???????/// <summary> ???????/// 使用Redis ???????/// </summary> ???????/// <param name="services"></param> ???????/// <param name="options"></param> ???????/// <returns></returns> ???????public static IServiceCollection UseRedis( ??????????this IServiceCollection services, ??????????Action<RedisConfig> options = null) ???????{ ???????????RedisConfig option = new RedisConfig(); ???????????options?.Invoke(option); ???????????ObjectMapper.MapperTo<RedisConfig>(option, ConfigFileHelper.Get<RedisConfig>());//优先级装饰器 ???????????services.AddSingleton(option); ???????????services.AddSingleton<RedisManager, RedisManager>(); ???????????return services; ???????} ???????/// <summary> ???????/// 使用Mongodb ???????/// </summary> ???????/// <param name="services"></param> ???????/// <param name="options"></param> ???????/// <returns></returns> ???????public static IServiceCollection UseMongodb( ?????????this IServiceCollection services, ?????????Action<MongodbConfig> options = null) ???????{ ???????????MongodbConfig option = new MongodbConfig(); ???????????options?.Invoke(option); ???????????ObjectMapper.MapperTo<MongodbConfig>(option, ConfigFileHelper.Get<MongodbConfig>());//优先级装饰器 ???????????services.AddSingleton(option); ???????????services.AddSingleton<MongodbManager, MongodbManager>(); ???????????return services; ???????} ???}
在程序中使用时,也是很方便,注意的是,如果配置文件中也配置它了,我们将以配置文件为准,这样在生产环境里,你的代码注入的参数,不用被注释和删除!
#region 服务组件 ???????????services.UseRabbitMQ(o => ???????????{ ???????????????o.ExchangeName = "Pilipa.AutoCalculate"; ???????????????o.MqServerHost = "amqp://192.168.200.214:5672"; ???????????}); ???????????services.UseRedis(o => ???????????{ ???????????????o.Host = "192.168.200.214:6379"; ???????????????o.AuthPassword = "pilipa#2017"; ???????????}); ???????????services.UseDapper(o => ???????????{ ???????????????o.DbType = 2; ???????????????o.ConnectionString = "test"; ???????????}); ???????????#endregion
感谢各位的阅读!
我们的框架应该是基于组件化的!
我们的系统应该是基于微服务化的!
我们的部署,应该是基于自动化的!
回到目录
DotNetCore跨平台~组件化时代来了
原文地址:http://www.cnblogs.com/lori/p/7833977.html