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的更多相关文章

  1. Autofac在.NetCore 下的使用

    在工作开发中很多地方都会使用到接口模式开发,这里就会用到依赖注入,.NetCore目前是自带的 ,在 Startup.cs中的 ConfigureServices方法中增加 public void C ...

  2. netcore web.config ConnectionStrings AppSettings

    new ConfigurationBuilder().Build().GetSection("ConnectionStrings") new ConfigurationBuilde ...

  3. Netcore logging config

  4. SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)

    一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...

  5. apollo入门demo实战(二)

    1. apollo入门demo实战(二) 1.1. 下载demo 从下列地址下载官方脚本和官方代码 https://github.com/nobodyiam/apollo-build-scripts ...

  6. Spring Cloud 入门 之 Config 篇(六)

    原文地址:Spring Cloud 入门 之 Config 篇(六) 博客地址:http://www.extlight.com 一.前言 随着业务的扩展,为了方便开发和维护项目,我们通常会将大项目拆分 ...

  7. SpringCloud-动态配置变化监控-获取变化(支持Config、Nacos)

    SpringCloud-动态配置变化监控-获取变化(支持Config.Nacos) qq交流群: 812321371 微信交流群: MercyYao 简介 配置中心有原生的 SpringCloud C ...

  8. 缓存管理之MemoryCache与Redis的使用

    一..MemoryCache介绍 MemoryCache是.Net Framework 4.0开始提供的内存缓存类,使用该类型可以方便的在程序内部缓存数据并对于数据的有效性进行方便的管理, 它通过在内 ...

  9. 因MemoryCache闹了个笑话

    前言 是这么一回事: 我正在苦思一个业务逻辑,捋着我还剩不多的秀发,一时陷入冥想中...... 突然聊天图标一顿猛闪,打开一看,有同事语音: 大概意思是:同事把项目中Redis部分缓存换成Memory ...

随机推荐

  1. LeetCode OJ:Rotate Image(旋转图片)

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  2. Spring-Kafka 2.0.0发送API翻译

    Kafka Template–2.2.0 api KafkaTemplate KafkaTemplate这个类包装了个生产者,来提供方便的发送数据到kafka的topic里面. 同步和异步的方法都有, ...

  3. grep 常用正则匹配

    1.或操作 grep -E '123|abc' filename // 找出文件(filename)中包含123或者包含abc的行 egrep '123|abc' filename // 用egrep ...

  4. linux学习 XShell上传、下载本地文件到linux服务器

    (一)通过命令行的方式 1.linux服务器端设置 在linux主机上,安装上传下载工具包rz及sz; 如果不知道你要安装包的具体名称,可以使用yum provides */name 进行查找系统自带 ...

  5. NSArray四种遍历方法

  6. VBA程序的调试

    VBA程序的调试:设置断点.单步跟踪.设置监视窗 Acces的VBE编程环境提供了完整的一套调试工具和调试方法.熟练掌握好这些调试工具和调试方法的使用,可以快速.准确地找到问题所在,不断修改,加以完善 ...

  7. w3cschool在线教程

    做网页开发的,没有不知道w3cschool的,如果你还不知道,那么就应该早点看下面推荐的文章,菜鸟可以帮你提升你的技能,老鸟可以温故而知新. 第一个是:http://www.w3school.com. ...

  8. easyui datagrid 单元格加进度条(亲测可用)

    {field: 'DataItemNum', title: '数据完整度', width: 100, formatter: function (v, r, i) { var p = (v / 27) ...

  9. Linux IO 监控与深入分析

    https://jaminzhang.github.io/os/Linux-IO-Monitoring-and-Deep-Analysis/ Linux IO 监控与深入分析 引言 接昨天电话面试,面 ...

  10. Ubuntu-14.04-QT开发环境搭建-(一)

    Ubuntu 14.04 QT 开发环境搭建 一 . 软件:qt-creator-linux-x86-opensource-2.7.0.binqt-everywhere-opensource-src- ...