//数据处理接口

public interface IDal<T> where T : class

{
void Insert (T model);
void Update(T model);
void Delete(T model);
T Select(Int32 id);
}

//MsSql接口

public class MsSqlDal<T> : IDal<T> where T:class ,new ()
{

public void Insert(T model)
{
Console.WriteLine("您向MsSql添加了一条记录!" + typeof(T).Name + ";model:" + model.ToString());
}

public void Update(T model)
{
Console.WriteLine("您向MsSql修改了一条记录!" + typeof(T).Name + ";model:" + model.ToString());
}

public void Delete(T model)
{
Console.WriteLine("您向MsSql删除了一条记录!" + typeof(T).Name + ";model:" + model.ToString());
}

public T Select(Int32 id)
{
Console.WriteLine("您向MsSql查询了一条记录!" + typeof(T).Name );
return new T();
}
}

//MySql接口
public class MySqlDal<T> : IDal<T> where T : class ,new()
{

public void Insert(T model)
{
Console.WriteLine("您向MySql添加了一条记录!" + typeof(T).Name + ";model:" + model.ToString());
}

public void Update(T model)
{
Console.WriteLine("您向MySql修改了一条记录!" + typeof(T).Name + ";model:" + model.ToString());
}

public void Delete(T model)
{
Console.WriteLine("您向MySql删除了一条记录!" + typeof(T).Name + ";model:" + model.ToString());
}

public T Select(Int32 id)
{
Console.WriteLine("您向MySql查询了一条记录!" + typeof(T).Name );
return new T();
}
}

//数据仓储接口

public interface IReposity<T> where T:class
{
void Insert(T model);
void Update(T model);
void Delete(T model);
T Select(Int32 id);
}

//
public class Reposity<T> : IReposity<T> where T : class
{
readonly IDal<T> _dal;

public Reposity(IDal<T> dal)
{
this._dal = dal;
}

public void Insert(T model)
{
_dal.Insert(model);
}
public void Update(T model)
{
_dal.Update(model);
}
public void Delete(T model)
{
_dal.Delete(model);
}
public T Select(Int32 id)
{
return _dal.Select(id);
}
}

public class Order
{
public Int32 Id { get; set; }
public String CName { get; set; }
public String CPhone { get; set; }
public override string ToString()
{
return String.Format("Id:{0},CName:{1},CPhone{2}", Id, CName, CPhone);
}
}

public class OrderBll : IDependency
{
private readonly IReposity<Order> _reposity;

public OrderBll(IReposity<Order> reposity)
{
this._reposity = reposity;
}

public void Insert(Order model)
{
_reposity.Insert(model);
}
public void Update(Order model)
{
_reposity.Update(model);
}
public void Delete(Order model)
{
_reposity.Delete(model);
}
public Order Select(Int32 id)
{
return _reposity.Select(id);
}

}

//所有Bll都继承这个接口
public interface IDependency
{

}

static void Main(string[] args)
{
var builder=new Autofac.ContainerBuilder();
//builder.RegisterGeneric(typeof (MsSqlDal<>)).As( typeof(IDal<>)).InstancePerDependency();
builder.RegisterGeneric(typeof(MySqlDal<>)).As(typeof(IDal<>)).InstancePerDependency();
 
builder.RegisterGeneric(typeof (Reposity<>)).As(typeof (IReposity<>)).InstancePerDependency();

//注册单类
builder.RegisterType < OrderBll>();
//注册程序集中实现所有IDependency的类

var assem = Assembly.GetExecutingAssembly() ;

builder.RegisterAssemblyTypes(assem).Where(a => a.GetInterfaces().Contains(typeof(IDependency)));

//
var container = builder.Build();
var dal = container.Resolve<OrderBll>();
var order=new Order ()
{
Id=1,
CName = "Aven",
CPhone = "13876544567"
};
dal.Insert(order);
Console.Read();
}

autofac 初步学习的更多相关文章

  1. json2.js的初步学习与了解

    json2.js的初步学习与了解,想要学习json的朋友可以参考下. json2.js的初步学习与了解 1.)该js的下载地址是:http://www.json.org/json2.js 2.)在页面 ...

  2. 老周的ABP框架系列教程 -》 一、框架理论初步学习

    老周的ABP框架系列教程 -- 一.框架理论初步学习   1. ABP框架的来源与作用简介 1.1  简介 1.1.1       ABP框架全称为"ASP.NET Boilerplate ...

  3. 初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助

    初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: var fs = require('f ...

  4. EF Codefirst 初步学习(二)—— 程序管理命令 更新数据库

    前提:搭建成功codefirst相关代码,参见EF Codefirst  初步学习(一)--设置codefirst开发模式 具体需要注意点如下: 1.确保实体类库程序生成成功 2.确保实体表类库不缺少 ...

  5. 初步学习python

    自计算机诞生以来,也伴随着计算机语言的诞生,现在,全世界的编程语言有600多种,但流行的编程语言也就20多种. Java和C一直占据着前两名.但是近年来伴随着人工智能的发展,Python发展迅猛,以其 ...

  6. Git的初步学习

    前言 感谢! 承蒙关照~ Git的初步学习 为什么要用Git和Github呢?它们的出现是为了用于提交项目和存储项目的,是一种很方便的项目管理软件和网址地址. 接下来看看,一家公司的基本流程图: 集中 ...

  7. 语法分析器初步学习——LISP语法分析

    语法分析器初步学习——LISP语法分析 本文参考自vczh的<如何手写语法分析器>. LISP的表达式是按照前缀的形式写的,比如(1+2)*(3+4)在LISP中会写成(*(+ 1 2)( ...

  8. 状态保持以及AJAX的初步学习

    嘿嘿,今天学习的有点迷茫哦,主要学习把验证码使用在登录页面时间的一些逻辑,学习这个时间并没有那么的迷惑哦,可是自己写程序时间倒是有点反应迟钝,不过还好总是在最后搞清楚啦,另外就是一步一步的学习是接近项 ...

  9. LinQ的初步学习与总结

    嘿嘿,说起来ORM和LinQ,就感觉离我好遥远的,在学校是没有学习的,所以总感觉学习了LinQ就是大神,现在嘛,终于也体会一点,感觉LinQ只是初步学习,没有太难,当然以后使用在项目中就没有这样的简单 ...

随机推荐

  1. 【转】【Asp.Net】asp.net(c#) 网页跳转

    在asp.net下,经常需要页面的跳转,下面是具体的几种方法.跳转页面是大部编辑语言中都会有的,正面我们来分别介绍一下关于.net中response.redirect sever.execute se ...

  2. [vm]exsi的名词

    早上想了想高可用.昨晚想学学虚拟vmware的一些东西. 物理机---exsi---vm 物理机-win7-vmware-vm   服务器高可用:   一 名词 1,虚拟网络 2,虚拟交换机 3,vm ...

  3. 2016温碧霞爱情《爱在深秋》HD720P.国语中字

    导演: 林家威编剧: 林家威 / 李非 / 黄国兆主演: 温碧霞 / 谭耀文 / 赵炳锐 / 方皓玟 / 王建成类型: 爱情制片国家/地区: 香港语言: 汉语普通话上映日期: 2016-01-22(中 ...

  4. Caffe学习系列(1):安装配置ubuntu14.04+cuda7.5+caffe+cudnn

    一.版本 linux系统:Ubuntu 14.04 (64位) 显卡:Nvidia K20c cuda: cuda_7.5.18_linux.run cudnn: cudnn-7.0-linux-x6 ...

  5. TableCell高度的控制

    TableCell高度的控制 计算并指定行高rowHeight 强制指定:self.tableView.rowHeight = 88 或实现UITableViewDelegate.tableView( ...

  6. Asp.Net的两种开发方式

    来源:http://www.zhidao91.com/asp-net/ 在经过对.Net平台深入的学习以后,我发现很多语言开发动态网站时,它的后台逻辑都差不多是相同的,今天在这里我给大家来聊聊在.Ne ...

  7. 我给出的一份Java服务器端面试题-适合电话面试

    这部分内容,参考了<面试官的七种武器>一文. 电面与face2face的面试还是有区别的,很多考察方式无法使用. 从简历聊起,逐渐进入正题. Java语法 重载与重写的区别? java如何 ...

  8. Git.Framework 框架随手记--ORM新增操作

    本篇主要记录具体如何新增数据,废话不多说,开始进入正文. 一. 生成工程结构 上一篇已经说到了如何生成工程结构,这里在累述一次. 1. 新建项目总体结构 使用VS新建项目结构,分层结构可以随意.我们使 ...

  9. Mysql-proxy中的lua脚本编程(一)

    在为mysql-proxy编写lua脚步的时候,需要知道一下几个入口函数,通过这几个入口函数我们可以控制mysql-proxy的一些行为. connect_server()          当代理服 ...

  10. 第十六章:脚本化HTTP

    写在本章内容前: 第十五章:事件处理 涉及到到较多的文字篇幅,介于个人精力问题,暂不更新.主要包含的内容有事件类型.注册事件处理程序.事件处理程序的调用.文档加载事件.鼠标事件.鼠标滚轮事件.拖放事件 ...