1.winform用法:

nuget安装autofac

public interface ILog
{
bool Log(string msg);
}
public class TXTLogger : ILog
{
public bool Log(string msg)
{
Console.WriteLine(msg + " saved in file log.log");
return true;
}
}
public class DBLogger : ILog
{
public bool Log(string msg)
{
Console.WriteLine(msg + " saved in mssqlserver");
return true;
}
} public class UserService
{
public ILog log;
public UserService(ILog ilog) //构造函数注入
{
log = ilog;
} public bool AddUser()
{
log.Log("insert user succeed ,userId is :1");
return true;
}
}
     Autofac.IContainer container;

        private void Form1_Load(object sender, EventArgs e)
{//注册
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<DBLogger>().As<ILog>();
builder.RegisterType<TXTLogger>().As<ILog>();//后注册的会覆盖之前注册的
builder.RegisterType<UserService>();
container = builder.Build(); Test();
    } void Test()
{

var service = container.Resolve<UserService>(); //解析;并没有实例化new UserService也没有传入构造函数参数,autofac自动注入了
if (service!=null)
{
    var result = service.AddUser(); //输出insert user succeed ,userId is :1 saved in file log.log
}

        }

2.mvc用法:

安装 autofac和autofac.mvc5:

global.asax.cs中

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);        //mvc注册 参考:http://www.w2*bc.com/article/180590
ContainerBuilder builder = new ContainerBuilder(); builder.RegisterControllers(Assembly.GetExecutingAssembly()).AsSelf().PropertiesAutowired();
builder.RegisterType<DBLogger>().As<ILog>().InstancePerLifetimeScope();
builder.RegisterType<TXTLogger>().As<ILog>().InstancePerLifetimeScope();//后注册的会覆盖之前注册的
builder.RegisterType<UserService>().InstancePerLifetimeScope();
var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); //webapi注册
//WebApi Register
//builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).AsSelf().PropertiesAutowired();
//builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
/builder.RegisterWebApiModelBinderProvider();
}

controller中调用Test方法

        public static void Test()
{
//var log = DependencyResolver.Current.GetService<ILog>();
//var result = log.Log("test msg"); var service = DependencyResolver.Current.GetService<UserService>();
if (service != null)
{
service.AddUser(); //输出insert user succeed ,userId is :1 saved in file log.log
} }

参考:http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041.html

参考:http://www.w2b*c.com/article/180590

3.属性注入:

public class AA
{
public BB bb;
public AA()
{
} public void TestAA()
{
bb.TestBB();
}
}
public class BB
{
public void TestBB()
{
Console.WriteLine("TestBB Executed!");
}
}
       

       ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<BB>();
builder.Register(c => new AA() { bb = c.Resolve<BB>() }); //属性注入
var container = builder.Build();
var a = container.Resolve<AA>();
a.TestAA(); //输出:TestBB Executed!

From:http://www.cnblogs.com/xuejianxiyang/p/7064974.html

ioc autofac简单示例的更多相关文章

  1. Autofac 简单示例

    公司不用任何IOC,ORM框架,只好自己没事学学. 可能有些语言描述的不专业 希望能有点用 namespace Autofac { class Program { //声明一个容器 private s ...

  2. 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)

    一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...

  3. spring原理案例-基本项目搭建 03 创建工程运行测试 spring ioc原理实例示例

    下面开始项目的搭建 使用 Java EE - Eclipse 新建一 Dynamic Web Project Target Runtime 选 Apache Tomcat 7.0(不要选 Apache ...

  4. AutoFac简单入门

    AutoFac是.net程序下一个非常灵活易用,且功能强大的DI框架,本文这里简单的介绍一下使用方法. 安装: Install-Package Autofac 简单的示例: static void M ...

  5. 依赖注入(二)Autofac简单使用

    Autofac简单使用 源码下载传上源码,终于学会传文件了. 首先 还是那句话:“不要信我,否则你死得很惨!”. C#常见的依赖注入容器 IoC in .NET part 1: Autofac IoC ...

  6. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  7. C# 构建XML(简单示例)

    C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...

  8. 根据juery CSS点击一个标签弹出一个遮罩层的简单示例

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. ACEXML解析XML文件——简单示例程序

    掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...

随机推荐

  1. P5030 长脖子鹿放置 最小割

    $ \color{#0066ff}{ 题目描述 }$ 如图所示,西洋棋的"长脖子鹿",类似于中国象棋的马,但按照"目"字攻击,且没有中国象棋"别马腿& ...

  2. 20165224 陆艺杰 Exp6 信息搜集与漏洞扫描

    Exp6 信息搜集与漏洞扫描 (1)哪些组织负责DNS,IP的管理. 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和IP地址管理. (2)什么是3R信息. 注册人 ...

  3. centos的基本命令04

    零:简述linux的文档目录结构 linux的文档目录是一个树形结构,操作的时候表现为以 / 开头的树形结构,/也是系统 的最顶端,也就是linux的root,也是linux系统的文件系统的入口. 他 ...

  4. 「DB」数据库事务的隔离级别

    *博客搬家:初版发布于 2017/04/10 00:37    原博客地址:https://my.oschina.net/sunqinwen/blog/875833 数据库事务的隔离级别 讲事务的隔离 ...

  5. POJ_3264 Balanced Lineup 【线段树 + 区间查询】

    一.题面 POJ3264 二.分析 典型的线段树的题,没有更新只有查询. 查询的时候需要注意的是,在判断区间是完全属于右子树还是左子树时,要根据建树的情况来选择,不然会出错.具体看代码 三.AC代码 ...

  6. STM32的GPIO工作原理 | 附电路图详细分析

    STM32的GPIO介绍 STM32引脚说明 GPIO是通用输入/输出端口的简称,是STM32可控制的引脚.GPIO的引脚与外部硬件设备连接,可实现与外部通讯.控制外部硬件或者采集外部硬件数据的功能. ...

  7. 分分钟钟学会Python - 数据类型(list、tuple)

    第四节 数据类型(列表.元祖) 今日内容 列表 元祖 1.列表 1.格式 users = ["ji",1,3,"gyhj"] 2.公共方法 1.len #计算长 ...

  8. user agent stylesheet -- 浏览器默认样式

    user agent stylesheet 从字面意义上很容易理解他表示用户浏览器的样式表. 今天在做项目时,无意间发现一个元素我并没有设置li的text-align:center : 但其中的img ...

  9. 怎么用代码弹回 UITableView 中左滑出来的删除按钮

    点击取消,让删除按钮弹回去 [tableView setEditing:NO] 初学 ios 真是大菜鸟,这么简单的一个问题搞了 3 个小时

  10. ambari-server启动出现ERROR main] DBAccessorImpl:106 - Error while creating database accessor java.lang.ClassNotFoundException:com.mysql.jdbc.Driver问题解决办法(图文详解)

    不多说,直接上干货! 问题详情 ambari-server启动时,报如下的错误 问题分析 注:启动ambari访问前,请确保mysql驱动已经放置在/usr/share/Java内且名字是mysql- ...