ioc autofac简单示例
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简单示例的更多相关文章
- Autofac 简单示例
公司不用任何IOC,ORM框架,只好自己没事学学. 可能有些语言描述的不专业 希望能有点用 namespace Autofac { class Program { //声明一个容器 private s ...
- 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)
一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...
- spring原理案例-基本项目搭建 03 创建工程运行测试 spring ioc原理实例示例
下面开始项目的搭建 使用 Java EE - Eclipse 新建一 Dynamic Web Project Target Runtime 选 Apache Tomcat 7.0(不要选 Apache ...
- AutoFac简单入门
AutoFac是.net程序下一个非常灵活易用,且功能强大的DI框架,本文这里简单的介绍一下使用方法. 安装: Install-Package Autofac 简单的示例: static void M ...
- 依赖注入(二)Autofac简单使用
Autofac简单使用 源码下载传上源码,终于学会传文件了. 首先 还是那句话:“不要信我,否则你死得很惨!”. C#常见的依赖注入容器 IoC in .NET part 1: Autofac IoC ...
- Linux下的C Socket编程 -- server端的简单示例
Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...
- C# 构建XML(简单示例)
C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...
- 根据juery CSS点击一个标签弹出一个遮罩层的简单示例
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- ACEXML解析XML文件——简单示例程序
掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...
随机推荐
- ajax跨域请求问题
ajax是不允许跨域请求的,今天在使用bootstap-table的时候,data-url使用的地址是绝对地址,而非相对地址,因此在载入数据的时候就出错了. 启动的时候使用是 http://127.0 ...
- Linux I2C驱动程序设计
1. Linux I2C子系统架构 (1)I2C核心(I2C-Core):I2C 总线和I2C 设备驱动的中间枢纽,它提供了I2C 总线驱动和设备驱动的注册.注销方法等 (2)I2C控制器驱动(ada ...
- 采用轮询的方式检测串口输入&&采用中断的方式检测串口输入的区别!
区别1:中断USART1_IRQHandler()不放进main(主函数)里,而轮询检测rcv()需要: 但是需要在主函数里对中断NVIC()进行初始化,因为所有程序都是从主函数开始一步一步执行,想要 ...
- wordpress 后台页面无法显示绑定的台湾语言
问题:当前切换到的语言是English,然后在页面的列表中,分别显示的语言有中文和香港,没有出现台湾的图标,如上图所示 原因:在polylang插件的设置里面,可以看到台湾语言的 Language c ...
- 读取P12格式证书的密钥
不想存储p12证书内容,只想存储证书密钥,可通过以下实现读取证书的密钥出来: package com.zat.ucop.service.util; import org.apache.commons. ...
- C语言中结构体定义
struct test { int a; }; /* 定义一个结构体,名字是test,这样就可以使用struct test 来定义变量.比如 struct test a; */ typedef str ...
- IONIC 打包安卓apk详细过程
参照以下链接: https://blog.csdn.net/qq_20264891/article/details/79319408 当 cordova 项目安装的 android 平台版本 与 系统 ...
- Java虚拟机知识 总结 记录
总结了自己这两天掌握的一些JVM相关的知识.方便自己复习. jvm全称是Java Virtual Machine(java虚拟机).它之所以被称之为是“虚拟”的,就是因为它仅仅是由一个规范来定义的抽象 ...
- 深入理解BSS(Block Started by Symbol)
理解ELF的BSS section, 可以概括为: Uninitialized global/static data "Block Started by Symbol" " ...
- python中文分词工具——结巴分词
传送门: http://www.iteye.com/news/26184-jieba