Autofac 4 netcore with config demo
Autofac 4+以上和以前的配置不一样的,最近在NetCore中做项目,得到实例时折腾了一番。
使用场景,用autofac实例化数据库类型,避免一个个的去new
json配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<autofac defaultAssembly="Data.Orm.Dapper">
<components name="Chloe">
<key>ChloeMssqlKey</key>
<type>Data.Orm.Chloe.SqlServerDatabase,Data.Orm.Chloe</type>
<services name="IDatabase2" type="Data.DbFactory.IDatabase,Data.DbFactory" />
<injectProperties>true</injectProperties>
<parameters>
<conn>4</conn>
</parameters>
</components>
<components name="DapperMssql">
<key>DapperMssqlKey</key>
<type>Data.Orm.Dapper.SqlServerDatabase, Data.Orm.Dapper</type>
<services name="IDatabase" type="Data.DbFactory.IDatabase,Data.DbFactory" />
<injectProperties>true</injectProperties>
<parameters>
<conn>4</conn>
</parameters>
</components>
</autofac>
注册:
var config = new ConfigurationBuilder();
string path = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, @"Configs\autofac.xml");
//config.AddJsonFile(path);//Microsoft.Extensions.Configuration.json.dll
config.AddXmlFile(path);//Microsoft.Extensions.Configuration.xml.dll // Register the ConfigurationModule with Autofac.
var module = new ConfigurationModule(config.Build());
var builder = new ContainerBuilder();
builder.RegisterModule(module);
container = builder.Build();
获取:
/// <summary>
/// 获取对象实例
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="serviceName">数据库类型</param>
/// <param name="param">数据库连接串等参数</param>
/// <returns></returns>
public static T GetDbInstance<T>(string serviceName, params Parameter[] param)
{
if (container != null)
{
var serviceList = container.Resolve<IEnumerable<T>>(param);//http://www.bkjia.com/Asp_Netjc/1315802.html
foreach (var service in serviceList)
{
if (service.ToString().ToLower().Equals(serviceName.ToLower()))
{
return service;
}
}
}
return default(T);
}
container.Resolve<IEnumerable<T>>(param)这个地方折腾了好久,开始以为像以前一样注册多个,可以根据ID或name获取,实际上一直未获取到(这里一直不知道原因,一直提示未注册,希望高人可以指点下)
container.Resolve<Service>(param)
container.ResolveNamed<Service>()
container.ResolveKeyed<Service>()
如果去掉IEnumerable,则只能得到最后一个组件。 另外,参数说明:
Autofac提供了集中参数匹配类别:
- NamedParameter - 直接通过名称匹配目标参数
- TypedParameter - 通过类型来匹配目标参数
- ResolvedParameter - 灵活的参数匹配
NamedParameter 和 TypedParameter只支持常量。
ResolvedParameter 能够使用从容器中动态解析的值作为参数, 例如通过名字解析出的服务。
比如数据库连接:可以在xml配置一个默认的,也可以动态实例化时传入进去:
Data.DbFactory.IDatabase database = BaseUtility.Ioc.AutofacHelper.GetDbInstance<Data.DbFactory.IDatabase>("Data.Orm.Chloe.SqlServerDatabase",
new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(string) && pi.Name == "conn",
(pi, ctx) => "Data Source = .;Initial Catalog = Opencsharp.Net;Integrated Security = SSPI;")
);//按实际传入的实例化
Data.DbFactory.IDatabase database2 = BaseUtility.Ioc.AutofacHelper.GetDbInstance<Data.DbFactory.IDatabase>("Data.Orm.Chloe.SqlServerDatabase");//取默认的
Autofac 4 netcore with config demo的更多相关文章
- Autofac在.NetCore 下的使用
在工作开发中很多地方都会使用到接口模式开发,这里就会用到依赖注入,.NetCore目前是自带的 ,在 Startup.cs中的 ConfigureServices方法中增加 public void C ...
- netcore web.config ConnectionStrings AppSettings
new ConfigurationBuilder().Build().GetSection("ConnectionStrings") new ConfigurationBuilde ...
- Netcore logging config
- SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)
一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...
- apollo入门demo实战(二)
1. apollo入门demo实战(二) 1.1. 下载demo 从下列地址下载官方脚本和官方代码 https://github.com/nobodyiam/apollo-build-scripts ...
- Spring Cloud 入门 之 Config 篇(六)
原文地址:Spring Cloud 入门 之 Config 篇(六) 博客地址:http://www.extlight.com 一.前言 随着业务的扩展,为了方便开发和维护项目,我们通常会将大项目拆分 ...
- SpringCloud-动态配置变化监控-获取变化(支持Config、Nacos)
SpringCloud-动态配置变化监控-获取变化(支持Config.Nacos) qq交流群: 812321371 微信交流群: MercyYao 简介 配置中心有原生的 SpringCloud C ...
- 缓存管理之MemoryCache与Redis的使用
一..MemoryCache介绍 MemoryCache是.Net Framework 4.0开始提供的内存缓存类,使用该类型可以方便的在程序内部缓存数据并对于数据的有效性进行方便的管理, 它通过在内 ...
- 因MemoryCache闹了个笑话
前言 是这么一回事: 我正在苦思一个业务逻辑,捋着我还剩不多的秀发,一时陷入冥想中...... 突然聊天图标一顿猛闪,打开一看,有同事语音: 大概意思是:同事把项目中Redis部分缓存换成Memory ...
随机推荐
- [AOP] 6. 一些自定义的Aspect - 方法的重试(Retry)
前面的一系列文章介绍了AOP的方方面面: AOP的由来以及快速上手 AOP的两种实现-Spring AOP以及AspectJ Spring AOP中提供的种种Aspects - Tracing相关 S ...
- CentOS 7下sqlite3的问题修复
Centos7下的nltk启动问题 CentOS 7, Python 3.6,ipython 6.0.0 问题描述 ipython 启动ipython命令 import nltk 爆出以下的错误信息: ...
- HAWQ取代传统数仓实践(十二)——维度表技术之分段维度
一.分段维度简介 在客户维度中,最具有分析价值的属性就是各种分类,这些属性的变化范围比较大.对某个个体客户来说,可能的分类属性包括:性别.年龄.民族.职业.收入和状态,例如,新客户.活跃客户.不活跃客 ...
- 5.linux目录结构介绍
目录: 1.linux系统的目录结构特点?为何会形成这样的目录结构? 2.基本目录内容详解! 3.重要目录详解! 1.linux系统的目录结构特点? A.Linux系统的目录结构是一棵倒挂的大树,”/ ...
- boost库之 shared_ptr学习笔记
- HihoCoder 1104 : Suzhou Adventure(树形DP)
Suzhou Adventure 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi is taking an adventure in Suzhou n ...
- 安卓开发第一记 android stdio 安装后 新建测试项目报错
Failed to resolve:com.android.support:appcompat-v7:报错处理 你在使用android studio时是否也出现过上图的报错,你还在为它的出现烦恼? ...
- Fast Arrangement (线段树,延迟标志)
个人心得:线段树的延迟标志确实是减少了很多时间,思想比较简单,但是实现得时候和建立延迟的时候比较麻烦. 按照我的一些理解,就是更新时找到完全覆盖的区间时,更新延迟标志,不再往下更新,但此时父节点啥的都 ...
- verilog数组定义及其初始化
这里的内存模型指的是内存的行为模型.Verilog中提供了两维数组来帮助我们建立内存的行为模型.具体来说,就是可以将内存宣称为一个reg类型的数组,这个数组中的任何一个单元都可以通过一个下标去访问.这 ...
- 如何移除双系统mac中的windows系统
双系统 双系统即在电脑的不同分区中安装两个系统,两个系统不会互相影响,但是同时只能有一个系统正在运行,并且必须通过重启的方式来更换系统. 双系统一般由于解决对不同系统的需求,而且在电脑中直接安装系统也 ...