Autofac的高级使用——Autofac.2.6.3.862
1. 使用代码方式进行组件注册【依赖服务类和组件类】
- /// <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;
- }
- }
/// <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. 定义配置文件
- <?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>
<?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配置文件进行组件注册
- /// <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("..........");
- }
- }
- }
- }
- }
/// <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. 是否存在服务名,存在,则根据服务名取得对象
- //是否存在服务名
- if (container.IsRegisteredWithName(vServiceName, typeof(IDatabase)))
- {
- IDatabase db = container.ResolveNamed<IDatabase>(vServiceName);
- if (db != null)
- {
- db.Select("..........");
- }
- }
//是否存在服务名
if (container.IsRegisteredWithName(vServiceName, typeof(IDatabase)))
{
IDatabase db = container.ResolveNamed<IDatabase>(vServiceName);
if (db != null)
{
db.Select("..........");
}
}
3. Demo下载
4. 使用代码方式进行组件注册【不需要依赖】【类似反射的全字符串形式】
- /// <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;
- }
/// <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;
}
Autofac的高级使用——Autofac.2.6.3.862的更多相关文章
- IoC之AutoFac(四)——AutoFac在MVC中的使用
阅读目录 Mvc中使用Autofac 第一步:在mvc中添加dll文件,可以通过Nuget直接添加 第二步:在App_Start文件夹中添加一个AutofacConfig类 第三步:在Global.a ...
- .net Core Autofac稍微高级一点的方法
前情摘要 前段时间写了autofac的注入但是每次都需要去修改startup这应该不是大家想要的. 至少不是我想要的. 网上有朋友说可以创建一个基础类来时间. 好了吹牛时间结束我们开始干点正事. 创建 ...
- [Solution] 使用Autofac在MVC、Web API、WCF中实现IOC
本来想聊一下面试过程的,1个星期面了6家,4家当场给offer,2家技术通过(1家没下文,1家复试).从中也学习到一些东西,先还是继续Coding吧. 官网:http://autofac.org/ 下 ...
- ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入)
前言 本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期. 这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度. 目录 ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](七)
前言 大家好,我依旧是你们的老朋友Rector,很高兴又在周五的时候准时和大家见面. Rector的系列文章[一步一步创建ASP.NET MVC5程序[Repository+Autofac+Autom ...
- .NET手记-Autofac入门Getting Started
内容主要翻译自官方文档,原文请看:http://autofac.readthedocs.org/en/latest/getting-started/index.html#application-sta ...
- ASP.NET Core 整合Autofac和Castle实现自动AOP拦截
前言: 除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninject和Castle). 1.ASP ...
- C#开发微信门户及应用(42)--使用Autofac实现微信接口处理的控制反转处理
在很多情况下,我们利用IOC控制反转可以很方便实现一些接口的适配处理,可以在需要的时候切换不同的接口实现,使用这种方式在调用的时候,只需要知道相应的接口接口,具体调用哪个实现类,可以在配置文件中动态指 ...
- Autofac
程序集准备 Assembly: Autofac/Autofac.Integration.Mvc/System.Web.Mvc/System.Web.Helpers/System.Web.WebPage ...
随机推荐
- opencv6.3-imgproc图像处理模块之边缘检测
接opencv6.2-improc图像处理模块之图像尺寸上的操作 本文大部分都是来自于转http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutori ...
- [BZOJ1407][NOI2002]Savage(扩展欧几里德)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1407 分析: m,n范围都不大,所以可以考虑枚举 先枚举m,然后判定某个m行不行 某个 ...
- android服务之录音功能
该服务的作用是当打电话时自动录音. 布局文件 布局文件中开启录音服务 <?xml version="1.0" encoding="utf-8"?> ...
- iOS-- 重要的链接
面试题: http://www.jianshu.com/p/6a57c6e902e8 富文本: http://www.cnblogs.com/jys509/p/5018027.html
- Beta版本冲刺———第七天
会议照片: 项目燃尽图: 1.项目进展: 明天就验收了,今天做的是对项目的所有功能进行复查(由郭怡锋和洪大钊负责); 对于新增的功能:排行榜和撤销一步依然没有做出来.
- xml文件的生成与解析
生成方法一:同事StringBuffer类对xml文件格式解析写入 package com.steel_rocky.xml; import android.app.Activity; import a ...
- HTML5基础知识(3)--required属性
1.required属性规定在提交之前要填写输入域(不能为空). 2.代码 <body> <form> 账号:<input type="text" r ...
- Java设计模式(一) 策略模式
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 1,定义算法接口 package com.pattern.strategy.test; publ ...
- PyQt之布局&无边框&信号
这个例子相对综合一些,包括qt的布局,实现无边框效果,无边框也就是没有了窗口的title栏,没有title栏就不能拖动了, 所以我们进一步讲如何实现拖动.通过这边文章你可以掌握qt的布局,窗口定制,重 ...
- jquery 模糊查询下拉框
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD&g ...