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 ...
随机推荐
- 2016级算法第四次上机-E.Bamboo and the Ancient Spell
Bamboo and the Ancient Spell 分析 可能英文读题难度比较大,但是只要看到全大写的 "THE LONGEST COMMON SUBSEQUENCE !"应 ...
- CSS 加号选择器("+")
加号选择器("+"):就是指对找到的某类的元素除第一个元素以外的兄弟元素起作用,即第一个元素不起作用,后面的兄弟元素都会起作用 效果:给每一个li加一个border-left, ...
- 进阶篇:3)面向制造的设计DFM
本章目的:正确认识面向制造的设计-DFM. 1.DFM概念 DFM有两种描述是作者比较认可的. ①面向制造的设计(design for manufacturing简称DFM):指产品设计需要满足产品制 ...
- OPPO R11s在哪里打开Usb调试模式的简单方法
就在我们使用pc链接安卓手机的时候,如果手机没有开启usb调试模式,pc则不能够成功读到我们的手机,如果遇到此情况我们需要找方法将手机的usb调试模式打开,本文我们记录一下OPPO R11s如何开启u ...
- 超大图片显示,可任意缩放,移动,不用DiskLruCache
1.演示,代码 下载示例apk 下载项目 : https://gitee.com/xi/LImage.git 2.遇到的问题 想省内存,不太可能 只支持拖拽手势,不支持缩放相对简单,解码v ...
- Linux 远程登录ssh服务器
1.安装ssh服务器 sudo apt-get install openssh-server 2.在另一端输入ssh IP及密码(或ssh 用户名@IP)就可以远程登录到IP所在计算机
- Python - 三级菜单优化方法 (单层循环)
menu = {...... } current_layer = menu layers = [] while True: for k in current_layer: print(k) choic ...
- apache2 + django 路径问题
问题: 在代码中使用sys.path.append(), 添加模块路径后,仍然报错找不到包. 虽然在LD_LIBRARY_PATH中配置了.so文件打路径,仍然报错找不到. 原因: 检查apahce2 ...
- openerp学习笔记 domain 的应用
1.在Action中定义,domain用于对象默认的搜索条件: 示例: <record id="action_orders" model="ir.actions.a ...
- SuperMap iClient for JavaScript 之关联查询
人们常说,计划赶不上变化.同样的,在项目中,使用的数据也是在不断变化的,尤其是属性信息的改变.就比如说,地图上的地物,它的空间信息在比较长的时间内,都不会发生变化,他的属性信息在初期不完整或者与后来的 ...