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. promise的学习

    为了解决回调地狱的问题,所以出现了promise的设计思想. promise的三种状态: pending 等待状态 resolved 完成状态 rejected 拒绝状态 promise的三种状态,只 ...

  2. MVC认知路【点点滴滴支离破碎】【五】----form表单上传单个文件

    //个人理解:前台一个form加input[type='file'],在加一个submit的按钮 主要设置form的action,method,enctype='multipart/form-data ...

  3. C++11异常处理 noexcept

    1.简介 在C语言中,如果程序的运行出现异常.错误,我们想提供方案处理这些异常时,我们面临许多问题,如: (1)C语言没有提供统一(标准)的方式来处理错误: (2)无法保证错误会被正确的处理: (3) ...

  4. ListView适配器获取布局文件作为View的三种方式

    第一种方法: public View getView(int position, View convertView, ViewGroup parent) { View view = null; if ...

  5. js中如何去获取外部css样式

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  6. 在无修改权限的情况下修改文件hosts中的内容

    今天遇到了一个问题,本来希望修改hosts中的内容,但保存时被告知无权限,网上搜索有很多方法都无效,最后搜到一个简单的方法:将hosts文件复制到桌面上,修改,然后覆盖原来位置的hosts文件即可!

  7. [转]VirtualBox – Error In supR3HardenedWinReSpawn 问题解决办法

    原文地址:http://chenpeng.info/html/3510 Genymotion 模拟器安装好虚拟机后,启动时报错: —————————VirtualBox – Error In supR ...

  8. iOS开发小技巧--根据文字,计算label中文字高度

  9. 【BZOJ 4568】【SCOI 2016】幸运数字

    写了一天啊,调了好久,对拍了无数次都拍不出错来(数据生成器太弱了没办法啊). 错误1:把线性基存成结构体,并作为函数计算,最后赋值给调用函数的变量时无疑加大了计算量导致TLE 错误2:像这种函数(A, ...

  10. javascript 红宝书笔记之函数、变量、参数、作用域

    ECMAScript 不介意传进来多少个参数,也不介意传进来的参数类型.     理解参数:      命名的参数只提供便利,不是必需的.     ECMAScript 的变量包含两种不同的数据类型的 ...