Autofac应用总结
准备:
- public interface IDAL
- {
- void Insert(string commandText);
- }
- public class SqlDAL : IDAL
- {
- public void Insert(string commandText)
- {
- Console.WriteLine("使用sqlDAL添加相关信息");
- }
- }
- public class OracleDAL : IDAL
- {
- public void Insert(string commandText)
- {
- Console.WriteLine("使用OracleDAL添加相关信息");
- }
- }
- public class DBManager
- {
- IDAL _dal;
- private string Name;
- public DBManager(IDAL dal)
- {
- _dal = dal;
- }
- public DBManager(string name, IDAL _dal)
- {
- Name = name;
- this._dal = _dal;
- }
- public void Add(string commandText)
- {
- _dal.Insert($"Name-{Name}:{commandText}");
- }
- }
2,应用
- var builder = new ContainerBuilder();
//注册类型- builder.RegisterType<DBManager>();
//注册类型及其实例- builder.RegisterType<SqlDAL>().As<IDAL>();
- //命名注册
- builder.RegisterType<SqlDAL>().Named<IDAL>("sql");
- builder.RegisterType<OracleDAL>().Named<IDAL>("oracle");
- using (var container = builder.Build())
- {
- var manager = container.Resolve<DBManager>();
- manager.Add("INSERT INTO Persons VALUES ('Man', '25', 'WangW', 'Shanghai')");
- SqlDAL sqlDAL = (SqlDAL)container.ResolveNamed<IDAL>("sql");
- OracleDAL oracleDAL = (OracleDAL)container.ResolveNamed<IDAL>("oracle");
- //在解析实例时给其赋值
- var manager1 = container.Resolve<DBManager>(new NamedParameter("name", "SQL"));
- manager.Add("INSERT INTO Persons VALUES ('Man', '25', 'WangW', 'Shanghai')");
- }
常用方法:
AutoFac常用方法说明
(1)builder.RegisterType<Object>().As<Iobject>():注册类型及其实例。例如下面就是注册接口IDAL的实例SqlDAL
- ContainerBuilder builder = new ContainerBuilder();
- builder.RegisterType<SqlDAL>().As<IDAL>();
- IContainer container = builder.Build();
- SqlDAL sqlDAL = (SqlDAL)container.Resolve<IDAL>();
(2)IContainer.Resolve<IDAL>():解析某个接口的实例。例如上面的最后一行代码就是解析IDAL的实例SqlDAL
(3)builder.RegisterType<Object>().Named<Iobject>(string name):为一个接口注册不同的实例。有时候难免会碰到多个类映射同一个接口,比如SqlDAL和OracleDAL都实现了IDAL接口,为了准确获取想要的类型,就必须在注册时起名字。
- builder.RegisterType<SqlDAL>().Named<IDAL>("sql");
- builder.RegisterType<OracleDAL>().Named<IDAL>("oracle");
- IContainer container = builder.Build();
- SqlDAL sqlDAL = (SqlDAL)container.ResolveNamed<IDAL>("sql");
- OracleDAL oracleDAL = (OracleDAL)container.ResolveNamed<IDAL>("oracle");
(4)IContainer.ResolveNamed<IDAL>(string name):解析某个接口的“命名实例”。例如上面的最后一行代码就是解析IDAL的命名实例OracleDAL
(5)builder.RegisterType<Object>().Keyed<Iobject>(Enum enum):以枚举的方式为一个接口注册不同的实例。有时候我们会将某一个接口的不同实现用枚举来区分,而不是字符串,例如:
- public enum DBType{ Sql, Oracle}
- builder.RegisterType<SqlDAL>().Keyed<IDAL>(DBType.Sql);
- builder.RegisterType<OracleDAL>().Keyed<IDAL>(DBType.Oracle);
- IContainer container = builder.Build();
- SqlDAL sqlDAL = (SqlDAL)container.ResolveKeyed<IDAL>(DBType.Sql);
- OracleDAL oracleDAL = (OracleDAL)container.ResolveKeyed<IDAL>(DBType.Oracle);
(6)IContainer.ResolveKeyed<IDAL>(Enum enum):根据枚举值解析某个接口的特定实例。例如上面的最后一行代码就是解析IDAL的特定实例OracleDAL
(7)builder.RegisterType<Worker>().InstancePerDependency():用于控制对象的生命周期,每次加载实例时都是新建一个实例,默认就是这种方式
(8)builder.RegisterType<Worker>().SingleInstance():用于控制对象的生命周期,每次加载实例时都是返回同一个实例
(9)IContainer.Resolve<T>(NamedParameter namedParameter):在解析实例T时给其赋值
3,Asp.net MVC中应用
引入Autofac.Integration.Mvc.dll
- var builder = new ContainerBuilder();
- builder.RegisterType<SqlDAL>().As<IDAL>();
- builder.RegisterControllers(Assembly.GetExecutingAssembly());
- var container = builder.Build();
- DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
Controller中应用
- private IDAL iDal;
- public HomeController(IDAL iDal)
- {
- this.iDal = iDal;
- }
Autofac应用总结的更多相关文章
- AutoFac在项目中的应用
技能大全:http://www.cnblogs.com/dunitian/p/4822808.html#skill 完整Demo:https://github.com/dunitian/LoTCode ...
- Autofac - MVC/WebApi中的应用
Autofac前面写了那么多篇, 其实就是为了今天这一篇, Autofac在MVC和WebApi中的应用. 一.目录结构 先看一下我的目录结构吧, 搭了个非常简单的架构, IOC(web), IBLL ...
- Autofac - 生命周期
实例生命周期决定在同一个服务的每个请求的实例是如何共享的. 当请求一个服务的时候,Autofac会返回一个单例 (single instance作用域), 一个新的对象 (per lifetime作用 ...
- Autofac - 属性注入
属性注入不同于通过构造函数方式传入参数. 这里是通过注入的方式, 在类创建完毕之后, 资源释放之前, 给属性赋值. 这里, 我重新弄一些类来演示这一篇吧. public class ClassA { ...
- Autofac 的点滴
泛型类型的注册和使用 public interface IRepository<T> where T:class { } public interface ISchoolDetailRep ...
- ASP.NET Core 整合Autofac和Castle实现自动AOP拦截
前言: 除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninject和Castle). 1.ASP ...
- Autofac 的属性注入,IOC的坑
Autofac 是一款优秀的IOC的开源工具,完美的适配.Net特性,但是有时候我们想通过属性注入的方式来获取我们注入的对象,对不起,有时候你还真是获取不到,这因为什么呢? 1.你对Autofac 不 ...
- Autofac 组件、服务、自动装配 《第二篇》
一.组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1.类型创建RegisterType AutoFac能够通过反射检查一个类型,选择 ...
- 使用Adminlite + ASP.NET MVC5(C#) + Entityframework + AutoFac + AutoMapper写了个api接口文档管理系统
一.演示: 接口查看:http://apidoc.docode.top/ 接口后台:http://apiadmin.docode.top/ 登录:administrator,123456 二.使用到的 ...
- autofac 组件的实例范围
实例范围决定如何在请求之间共享服务. 原文地址:http://docs.autofac.org/en/latest/lifetime/instance-scope.html 每个依赖一个实例 使用这个 ...
随机推荐
- 【Java】Java复习笔记-第二部分
类和对象 类:主观抽象,是对象的模板,可以实例化对象 习惯上类的定义格式: package xxx; import xxx; public class Xxxx { 属性 ······; 构造器 ·· ...
- vue2.0如何自定义全局变量的方法
方法一:http://www.jianshu.com/p/04dffe7a6b74 //在mian.js中写入函数 Vue.prototype.changeData = function (){ al ...
- Mysql下SELECT的结果集作为UPDATE的WHERE条件时的SQL语法
UPDATE `WarningSendMail` AS alias_1 INNER JOIN (SELECT * FROM `WarningSendMail` WHERE flag=1 AND top ...
- uboot——之初体验
官方下载地址:ftp://ftp.denx.de/pub/u-boot/ uboot的终极奥义就是启动内核. 但是,现在,我们先做最基本的,去官网下载一个支持自己板子的uboot,然后解压缩,打补丁. ...
- Wireshark抓包工具HttpAnalyzerStdV7
http.request.full_uri contains "XXXserver/api/" http.host contains "XXX5.单位.com"
- 基于jQuery适合做图片类网站的特效
分享一款基于jquery适合做图片类网站的特效.这是一款鼠标经过图片滑动弹出标题效果代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class="c ...
- Android 两级菜单栏
这里来记录下,android 的两级菜单栏,就是顶部切换,和底部的切换.因为在这个上面整了太久的时间,所以特此记录下. 第一种: 先介绍一个网上别人写出来的效果吧,这个当时积分真的很高..CSDN30 ...
- Android webView输出自定义网页
这次来使用webview输出网页型数据.因为这样的数据好使用富文本编辑器,有各种各样的拓展. 上代码: package controller.hzl.com.testcall; import andr ...
- [转]PowerDesigner中name和code取消自动关联
PowerDesigner中,但修改了某个字段的name,其code也跟着修改,这个问题很讨厌,因为一般来说,name是中文的,code是字段名. 解决方法如下: 1.选择Tools->Gene ...
- 关于dubbo的provider和consumer都配置timeout超时时间的情况
本文转自:http://blog.csdn.net/lkforce/article/details/54380201 前言 在dubbo的provider和consumer的配置文件中,如果都配置了t ...