1. 使用代码方式进行组件注册【依赖服务类和组件类】

  1. /// <summary>
  2. /// 管理类
  3. /// </summary>
  4. public partial class Mgr
  5. {
  6. private static IContainer container = null;
  7. /// <summary>
  8. /// 自定义容器和组件注册
  9. /// </summary>
  10. /// <returns></returns>
  11. public static IContainer GetContainer()
  12. {
  13. if (container == null)
  14. {
  15. var builder = new ContainerBuilder();
  16. //builder.RegisterType<SqlDatabase>().As<IDatabase>();
  17. builder.RegisterType<SqlDatabase>().Named<IDatabase>("AutofacDemo.Lib.Sql.SqlDatabase");
  18. builder.RegisterType<OracleDatabase>().Named<IDatabase>("AutofacDemo.Lib.Oracle.OracleDatabase");
  19. container = builder.Build();
  20. }
  21. return container;
  22. }
  23. }
/// <summary>
/// 管理类
/// </summary>
public partial class Mgr
{
private static IContainer container = null; /// <summary>
/// 自定义容器和组件注册
/// </summary>
/// <returns></returns>
public static IContainer GetContainer()
{ if (container == null)
{
var builder = new ContainerBuilder();
//builder.RegisterType<SqlDatabase>().As<IDatabase>();
builder.RegisterType<SqlDatabase>().Named<IDatabase>("AutofacDemo.Lib.Sql.SqlDatabase");
builder.RegisterType<OracleDatabase>().Named<IDatabase>("AutofacDemo.Lib.Oracle.OracleDatabase"); container = builder.Build(); }
return container;
}
}

2. 使用配置文件进行组件注册【不需要依赖】

2.1. 定义配置文件

  1. <?xml version="1.0"?>
  2. <configuration>
  3. <configSections>
  4. <section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/>
  5. </configSections>
  6. <autofac>
  7. <components>
  8. <component name="AutofacDemo.Lib.Oracle.OracleDatabase" type="AutofacDemo.Lib.Oracle.OracleDatabase, AutofacDemo.Lib.Oracle" service="AutofacDemo.Lib.IDatabase, AutofacDemo.Lib"/>
  9. <component name="AutofacDemo.Lib.Sql.SqlDatabase" type="AutofacDemo.Lib.Sql.SqlDatabase, AutofacDemo.Lib.Sql" service="AutofacDemo.Lib.IDatabase, AutofacDemo.Lib"/>
  10. </components>
  11. </autofac>
  12. <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/>
</configSections>
<autofac>
<components>
<component name="AutofacDemo.Lib.Oracle.OracleDatabase" type="AutofacDemo.Lib.Oracle.OracleDatabase, AutofacDemo.Lib.Oracle" service="AutofacDemo.Lib.IDatabase, AutofacDemo.Lib"/>
<component name="AutofacDemo.Lib.Sql.SqlDatabase" type="AutofacDemo.Lib.Sql.SqlDatabase, AutofacDemo.Lib.Sql" service="AutofacDemo.Lib.IDatabase, AutofacDemo.Lib"/>
</components>
</autofac>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

2.2. 读取config配置文件进行组件注册

  1. /// <summary>
  2. /// 根据配置文件里的服务名生成对象
  3. /// </summary>
  4. public static void GetFrom_Config()
  5. {
  6. var builder = new ContainerBuilder();
  7. //从.config配置文件中取得相关的组件注册
  8. builder.RegisterModule(new ConfigurationSettingsReader("autofac"));
  9. using (var container = builder.Build())
  10. {
  11. string vServiceName = "AutofacDemo.Lib.Oracle.OracleDatabase";//服务名
  12. //vServiceName = "AutofacDemo.Lib.Sql.SqlDatabase";
  13. //是否存在服务名
  14. if (container != null)
  15. {
  16. if (container.IsRegisteredWithName(vServiceName, typeof(IDatabase)))
  17. {
  18. IDatabase db = container.ResolveNamed<IDatabase>(vServiceName);
  19. if (db != null)
  20. {
  21. db.Select("..........");
  22. }
  23. }
  24. }
  25. }
  26. }
        /// <summary>
/// 根据配置文件里的服务名生成对象
/// </summary>
public static void GetFrom_Config()
{ var builder = new ContainerBuilder(); //从.config配置文件中取得相关的组件注册
builder.RegisterModule(new ConfigurationSettingsReader("autofac")); using (var container = builder.Build())
{
string vServiceName = "AutofacDemo.Lib.Oracle.OracleDatabase";//服务名
//vServiceName = "AutofacDemo.Lib.Sql.SqlDatabase"; //是否存在服务名
if (container != null)
{
if (container.IsRegisteredWithName(vServiceName, typeof(IDatabase)))
{
IDatabase db = container.ResolveNamed<IDatabase>(vServiceName);
if (db != null)
{
db.Select("..........");
}
}
}
}
}

2.3. 是否存在服务名,存在,则根据服务名取得对象

  1. //是否存在服务名
  2. if (container.IsRegisteredWithName(vServiceName, typeof(IDatabase)))
  3. {
  4. IDatabase db = container.ResolveNamed<IDatabase>(vServiceName);
  5. if (db != null)
  6. {
  7. db.Select("..........");
  8. }
  9. }
                //是否存在服务名
if (container.IsRegisteredWithName(vServiceName, typeof(IDatabase)))
{
IDatabase db = container.ResolveNamed<IDatabase>(vServiceName);
if (db != null)
{
db.Select("..........");
}
}

3. Demo下载

点此下载

4. 使用代码方式进行组件注册【不需要依赖】【类似反射的全字符串形式】

  1. /// <summary>
  2. /// 自定义容器和通过反射进行组件注册
  3. /// </summary>
  4. /// <returns></returns>
  5. public static IContainer GetContainer()
  6. {
  7. if (container == null)
  8. {
  9. var builder = new ContainerBuilder();
  10. Type objType = Type.GetType("AutofacDemo.Lib.IDatabase, AutofacDemo.Lib");
  11. Type objTypeA = Type.GetType("AutofacDemo.Lib.Oracle.OracleDatabase, AutofacDemo.Lib.Oracle");
  12. Type objTypeB = Type.GetType("AutofacDemo.Lib.Sql.SqlDatabase, AutofacDemo.Lib.Sql");
  13. builder.RegisterType(objTypeA).Named("AutofacDemo.Lib.Oracle.OracleDatabase", objType);
  14. builder.RegisterType(objTypeB).Named("AutofacDemo.Lib.Sql.SqlDatabase", objType);
  15. ////需要知道接口
  16. //builder.RegisterType(objTypeA).Named<objType>("AutofacDemo.Lib.Sql.SqlDatabase");
  17. //builder.RegisterType(objTypeB).Named<objType>("AutofacDemo.Lib.Oracle.OracleDatabase");
  18. container = builder.Build();
  19. }
  20. return container;
  21. }
/// <summary>
/// 自定义容器和通过反射进行组件注册
/// </summary>
/// <returns></returns>
public static IContainer GetContainer()
{ if (container == null)
{
var builder = new ContainerBuilder(); Type objType = Type.GetType("AutofacDemo.Lib.IDatabase, AutofacDemo.Lib");
Type objTypeA = Type.GetType("AutofacDemo.Lib.Oracle.OracleDatabase, AutofacDemo.Lib.Oracle");
Type objTypeB = Type.GetType("AutofacDemo.Lib.Sql.SqlDatabase, AutofacDemo.Lib.Sql"); builder.RegisterType(objTypeA).Named("AutofacDemo.Lib.Oracle.OracleDatabase", objType);
builder.RegisterType(objTypeB).Named("AutofacDemo.Lib.Sql.SqlDatabase", objType); ////需要知道接口
//builder.RegisterType(objTypeA).Named<objType>("AutofacDemo.Lib.Sql.SqlDatabase");
//builder.RegisterType(objTypeB).Named<objType>("AutofacDemo.Lib.Oracle.OracleDatabase"); container = builder.Build(); }
return container;
}

download

Autofac的高级使用——Autofac.2.6.3.862的更多相关文章

  1. IoC之AutoFac(四)——AutoFac在MVC中的使用

    阅读目录 Mvc中使用Autofac 第一步:在mvc中添加dll文件,可以通过Nuget直接添加 第二步:在App_Start文件夹中添加一个AutofacConfig类 第三步:在Global.a ...

  2. .net Core Autofac稍微高级一点的方法

    前情摘要 前段时间写了autofac的注入但是每次都需要去修改startup这应该不是大家想要的. 至少不是我想要的. 网上有朋友说可以创建一个基础类来时间. 好了吹牛时间结束我们开始干点正事. 创建 ...

  3. [Solution] 使用Autofac在MVC、Web API、WCF中实现IOC

    本来想聊一下面试过程的,1个星期面了6家,4家当场给offer,2家技术通过(1家没下文,1家复试).从中也学习到一些东西,先还是继续Coding吧. 官网:http://autofac.org/ 下 ...

  4. ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入)

    前言 本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期. 这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度. 目录 ...

  5. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](七)

    前言 大家好,我依旧是你们的老朋友Rector,很高兴又在周五的时候准时和大家见面. Rector的系列文章[一步一步创建ASP.NET MVC5程序[Repository+Autofac+Autom ...

  6. .NET手记-Autofac入门Getting Started

    内容主要翻译自官方文档,原文请看:http://autofac.readthedocs.org/en/latest/getting-started/index.html#application-sta ...

  7. ASP.NET Core 整合Autofac和Castle实现自动AOP拦截

    前言: 除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninject和Castle). 1.ASP ...

  8. C#开发微信门户及应用(42)--使用Autofac实现微信接口处理的控制反转处理

    在很多情况下,我们利用IOC控制反转可以很方便实现一些接口的适配处理,可以在需要的时候切换不同的接口实现,使用这种方式在调用的时候,只需要知道相应的接口接口,具体调用哪个实现类,可以在配置文件中动态指 ...

  9. Autofac

    程序集准备 Assembly: Autofac/Autofac.Integration.Mvc/System.Web.Mvc/System.Web.Helpers/System.Web.WebPage ...

随机推荐

  1. 让时间处理简单化 【第三方扩展类库org.apache.commons.lang.time】

    JAVA的时间日期处理一直是一个比较复杂的问题,大多数程序员都不能很轻松的来处理这些问题.首先Java中关于时间的类,从 JDK 1.1 开始,Date的作用很有限,相应的功能已由Calendar与D ...

  2. 【AS3】Flash与后台数据交换四种方法整理

    随着Flash Player 9的普及,AS3编程也越来越多了,所以这次重新整理AS3下几种与后台数据交换方法.1.URLLoader(URLStream)2.FlashRemoting3.XMLSo ...

  3. Android手机截屏

    刚开始打算做一个简单的截屏程序时,以为很轻松就能搞定. 在Activity上放一个按钮,点击完成截屏操作,并将数据以图片形式保存在手机中. 动手之前,自然是看书和网上各种查资料.结果发现了解的知识越多 ...

  4. c++ iterator(迭代器)分类及其使用

    前言: 以下的内容为我阅读c++沉思录18,19,20章的笔记以及自己的想法. 正文: 总所周知,c++的stl中提出了iterator的概念,这是C所没有的.在一般的使用中,iterator的行为很 ...

  5. difference between append and appendTo

    if you need append some string to element and need set some attribute on these string at the same ti ...

  6. iOS常用---NSString,NSMutabuleString

    普通的创建字符串: NSString *string =[[NSString alloc]init]; //创建一个空的字符串,即 @“” 一 .字符串读取本地文件: 参数一: 文件地址 参数二: 文 ...

  7. MySQL中的insert ignore into, replace into等的一些用法总结

    在MySQL中进行条件插入数据时,可能会用到以下语句,现小结一下.我们先建一个简单的表来作为测试: CREATE TABLE `books` ( `id` INT(11) NOT NULL AUTO_ ...

  8. python复习

    1.input和raw_input的区别 input假设输入的都是合法的python表达式,如输入字符串时候,要加上引号,而raw_input都会将所有的输入作为原始数据 2.原始字符串前面加上r,e ...

  9. 线段树 poj3225

    U:把区间[l,r]覆盖成1I:把[-∞,l)(r,∞]覆盖成0    D:把区间[l,r]覆盖成0C:把[-∞,l)(r,∞]覆盖成0 , 且[l,r]区间0/1互换S:[l,r]区间0/1互换 因 ...

  10. 状态压缩 HDU4539 郑厂长系列故事——排兵布阵

    多组n *m 0不能放1可以放 每个士兵可以攻击到并且只能攻击到与之曼哈顿距离为2的位置以及士兵本身所在的位置. #include<stdio.h> #include<algorit ...