autofac是依赖注入

我们以前要引入一个dal层,是这么写的

private IDal _dao = new Dal()

我们可以看得出,这样写,我们的bll层不光依赖了接口IDal,还依赖了Dal

记得老师说过,层与层直接的依赖,都依赖于接口,也就是只依赖IDal就够了,这样并不是一个最终的解决方案

这里可以用抽象工厂,让工厂为我们创建出一个实现了IDal接口的类,autofac就是这样一个工厂

创建FuturesContest.DAL.Container层

新建一个Container类

using System;
using Autofac;
using FuturesContest.IDAL; namespace FuturesContest.DAL.Container
{
public class Container
{
/// <summary>
/// IOC容器
/// </summary>
public static IContainer FacContainer; /// <summary>
/// 获取IDal的实例化对象
/// </summary>
/// <typeparam name="T">接口</typeparam>
/// <returns>实例化dao</returns>
public static T Resolve<T>()
{
try
{
//如果容器为空,初始化
if (FacContainer == null)
{
Initialise();
}
}
catch (Exception ex)
{
throw new System.Exception("IOC实例化出错!" + ex.Message);
} return FacContainer.Resolve<T>();
} /// <summary>
/// 初始化容器
/// </summary>
public static void Initialise()
{
var builder = new ContainerBuilder();
//格式builder.RegisterType<xxxDal>().As<IxxxDal>().InstancePerLifetimeScope();
builder.RegisterType<UserDal>().As<IUserDal>().InstancePerLifetimeScope();
builder.RegisterType<MenuDal>().As<IMenuDal>().InstancePerLifetimeScope();
builder.RegisterType<MienDal>().As<IMienDal>().InstancePerLifetimeScope();
builder.RegisterType<RuleDal>().As<IRuleDal>().InstancePerLifetimeScope();
builder.RegisterType<ActorDal>().As<IActorDal>().InstancePerLifetimeScope();
builder.RegisterType<PlayTimeDal>().As<IPlayTimeDal>().InstancePerLifetimeScope();
FacContainer = builder.Build();
}
}
}

在Initialise中,以规定的格式,配置出类与接口的映射

这样,在我们想引用一个dal的时候,我们就可以这样写

        private readonly IUserDal _dao = Container.Resolve<IUserDal>();

期货大赛项目|三,autofac简单用法的更多相关文章

  1. 期货大赛项目|四,MVC的数据验证

    上图先看下效果 样式先不说,先了解下数据验证是怎么实现的 一 必须是强类型的视图 二 这些显示提示的话语,都在强类型的实体中 三 必须使用Html.BeginForm或者Html.AjaxBeginF ...

  2. 期货大赛项目|五,表格插件datatatables在MVC中的应用

    系统中都需要表格,我见过最好的表格就是Datatables了,但中文文档有限,英文能力有限,就写一些简单用法 上图看效果先 要了分页和排序 基本用法 引入js和css bundles.Add(new ...

  3. 期货大赛项目|六,iCheck漂亮的复选框

    废话不多说,直接上图 对,还是上篇文章的图,这次我们不研究datatables,而是看这个复选框,比平常的复选框漂亮太多 看看我是如何实现的吧 插件叫iCheck 用法也简单 引入js和css $(& ...

  4. 期货大赛项目|八,ueditor的应用

    百度开发的富文本编辑器还是很不错的,可以已经不维护了 下载ueditor1_4_3_3-utf8-net放到项目中 找到net文件夹下config.json 修改以下两行 "imageUrl ...

  5. 期货大赛项目|十,MVC对js和css的压缩

    在Global.asax中添加两行代码 //默认在调试期间,不会启用js和css的压缩 //下面的语句确保了在调试期间也压缩css和js BundleTable.EnableOptimizations ...

  6. 期货大赛项目|九,fileinput插件的应用

    引入JS和CSS bundles.Add(new ScriptBundle("~/bundles/fileinputJs").Include( "~/Content/ve ...

  7. 期货大赛项目|二,DAL详解

    接口层就不重点讲述了,直接DAL层 DAL层 using System; using System.Collections.Generic; using System.Linq; using Syst ...

  8. 第二节:框架前期准备篇之AutoFac常见用法总结

    一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点点小小的风波,我说我的好,他说他的好,非常容 ...

  9. 转载 AutoFac常见用法总结

    第二节:框架前期准备篇之AutoFac常见用法总结   一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势 ...

随机推荐

  1. Cannot open Eclipse Marketplace

    (1) window->preferences->General->Network Connections,Active Provider处勾选Manual (2)在eclipse. ...

  2. 码云 Git No network connection

    背景 git,好久没用了都.心血来潮还是赶紧熟悉下吧.果不其然,每次要熟悉或开始一个东西,立马就出现问题.本来好好的环境竟然不行了,搞定后感觉应该是换了网络环境的事.这倒次要,主要让我想起了最初学习g ...

  3. 004_LVS及haproxy

    一.lvs工作在哪层(新浪面试题) http://blog.chinaunix.net/uid-346158-id-2131163.html 二.四层.七层负载均衡的区别 所谓四层就是基于IP+端口的 ...

  4. springboot:SunCertPathBuilderException: unable to find valid certification path to requested target

    有次创建springboot工程时报错,在之前是没有问题的.见下: 出现这种情况,有时在URL最后加一个反斜杠就可以了,但是这次不行,加了也没有用. 后来把URL改成了:http://start.sp ...

  5. Windows 下搭建 SVN服务器及使用

    目录 一 .安装Visual SVN 二.配置SVN 三.安装TortoiseSVN 四.上传项目到远程仓库 五.从远程仓库下载项目 六.检出项目 七.版本回退 参考链接 http://blog.cs ...

  6. Linux命令之top、ulimit、free

    1.[ulimit命令] ulimit命令用来限制系统用户对shell资源的访问. 假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这 10 个用户同时 ...

  7. MYSQL事务处理失效原因

    mysql有多种存储引擎,有些版本(mysql5.5.5以前默认是MyISAM,mysql5.5.5以后默认是InnoDB)安装时默认的存储引擎是MyISAM,而MyISAM存储引擎是不支持事务处理的 ...

  8. CSS rem长度单位

    1. 概述 1.1 说明 rem是css3中新增的一个单位属性(font size of the root element),根据页面的根节点(html)的字体大小进行转换的单位,通过此单位属性可以进 ...

  9. python字符串,列表常用操作

    24天养成一个好习惯,第五天! 一.字符串需要掌握的操作 1.取值(索引取值)需要注意的是只能取,不能改 msg = 'hello world' print(msg[4]) 2.切片(顾头不顾尾) m ...

  10. ES的Query、Filter、Metric、Bucketing使用详解

    由于笔者在实际项目仅仅将ES用作索引数据库,并没有深入研究过ES的搜索功能.而且鉴于笔者的搜索引擎知识有限,本文将仅仅介绍ES简单(非全文)的查询API. 笔者原本打算在本文中介绍聚合API的内容,但 ...