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. Toxy新手指南

    Neuzilla出品 官方网站:http://toxy.codeplex.com QQ群:297128022 官方微信公众号: Toxy 是干嘛用的?它是.NET平台上的文件抽取框架,主要解决各种格式 ...

  2. web安全——目录

    说明 写这个目录是为了方便阅读.也是为了记录统一的问题. 这个系列,并不一定是全的,也不一定是对的,所以请大家多做过滤. 这里面场景比较多的是本人在实践中遇到的问题,然后自己思考抽象的. 目录 web ...

  3. 【python游戏编程之旅】第九篇---嗷大喵快跑小游戏开发实例

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 前几期博客我们一起学习了,pygame中的冲突检测技术以及一些常用的数据结构. 这次我们来一起做一个简单的酷 ...

  4. windows部署React-Native的开发环境实践(技术细节)

    前情摘要 众所周知,有人说.net可以用Xamrian,呵呵,不习惯收费的好么?搞.Net的人设置一次java的环境变量,可能都觉得实在太麻烦了,可能是因为这些年微软确实把我们给带坏了,所有东西一键安 ...

  5. 提高Visual Studio开发性能的几款插件

    通过打开Visual Studio,单机TOOLS—Extensions and Updates-Online-Visual Studio Gallery(工具-扩展和更新-联网-Visual Stu ...

  6. 在线程中调用SaveFileDialog

    在多线程编程中,有时候可能需要在单独线程中执行某些操作.例如,调用SaveFileDialog类保存文件.首先,我们在Main方法中创建了一个新线程,并将其指向要执行的委托SaveFileAsyn.在 ...

  7. jquery 使用方法(转)

    原文: http://www.cnblogs.com/Chenfengtao/archive/2012/01/12/2320490.html jQuery是目前使用最广泛的javascript函数库. ...

  8. iOS -- MJrefresh

    - (void)refresh { MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self r ...

  9. android 按钮点击效果实现 在studio下出现的错误

    在照做上一篇随笔的时候 在studio下为了方便我在写完一个 btn_select.xml 文件后直接粘贴了三个文件到drawable下 结果问题来了 总是报这样一个错误: Resource is n ...

  10. PHP mail()函数

    <?php /* PHP mail()函数 参数 描述 to 必需.规定 email 接收者. subject 必需.规定 email 的主题.注释:该参数不能包含任何新行字符. message ...