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 ...
随机推荐
- 剑指offer--24.树的子结构
时间限制:1秒 空间限制:32768K 热度指数:407165 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) class Solution ...
- FindBugs初探
1. 什么是FindBugs FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.有了静态分析工具,就可以在不实际运行程序的情况对软件进行 ...
- HAWQ取代传统数仓实践(十七)——事实表技术之累积度量
累积度量指的是聚合从序列内第一个元素到当前元素的数据,例如统计从每年的一月到当前月份的累积销售额.本篇说明如何在销售订单示例中实现累积月销售数量和金额,并对数据仓库模式.初始装载.定期装载做相应地修改 ...
- React Native探索(四)Flexbox布局详解
相关文章 React Native探索系列 前言 在Android开发中我们有很多种布局,比如LinearLayout和RelativeLayout,同样在React Native也有它的布局,这个布 ...
- go 通过nginx代理后获取用户ip
go 如果使用自己的服务器,可以直接使用 net/http 来获取 func ip(w http.ResponseWriter, r *http.Request) { fmt.Println(r.Re ...
- [转]MFC 调用 printf 输出
摘自:http://blog.csdn.net/miyunhong/article/details/6704121 #include <io.h> #include <fcntl.h ...
- 【MFC】CDC::BitBlt介绍
CDC::BitBlt介绍 2011-11-04 08:25 19576人阅读 评论(6) 收藏 举报 摘自: http://blog.csdn.net/bberdong/article/detail ...
- 【英语】Bingo口语笔记(86) - stand系列
- 《DSP using MATLAB》示例Example7.20
代码: M = 51; alpha = (M-1)/2; Dw = 2*pi/M; l = 0:M-1; wl = Dw*l; T1 = j*0.39; k1 = 0:floor((M-1)/2); ...
- 关于fft后图像的纵轴问题
fft后如果纵轴是abs后的值,且为双边图像,那么纵轴表示的就是此频率下信号的幅值*N/2的值,也就是说,如果有一正弦信号,幅度为1,假如fft了50个点,那么此信号频率的幅度就是1*50/2=25. ...