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 ...
随机推荐
- js 平均分割
let alllist=res.data; var result = []; for (var i = 0; i < alllist.length; i += 3) { result.push( ...
- ListView-电影列表
import React, { Component } from 'react';import { Platform, StyleSheet, Text, View, ListView } from ...
- tomcat增加运行内存
内容为: set JAVA_OPTS=%JAVA_OPTS% -server -Xms2048m -Xmx2048m -XX:PermSize=212M -XX:MaxPermSize=512m 在m ...
- 初识express
初识Express 1.简介: express是基于Nodejs平台的快速,开放,极简的web开发框架 2.安装 npm install express --save 3.Hello world: c ...
- Windows下的ntfs流文件简介
流文件,即NTFS交换数据流(alternate data streams,简称ADS),是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流,就是说除了主文件流之外还可以 ...
- 【Python】端口扫描脚本
0x00 使用模块简介 1.optparse模块 选项分析器,可用来生成脚本使用说明文档,基本使用如下: import optparse #程序使用说明 usage="%prog -H ...
- django 中的聚合和分组 F查询 Q查询 事务cookies和sessions 066
1 聚合和分组 聚合:对一些数据进行整理分析 进而得到结果(mysql中的聚合函数) 1aggregate(*args,**kwargs) : 通过对QuerySet进行计算 ,返回一个聚合值的字典. ...
- vue 之bug<1> Warn : [vue-router] Duplicate named routes definition:
原因:定义重复的路由名称. 我有3个不同的(父级)vue文件分别配置了3个相同的(子级)vue文件,配置路由的js文件里子集路由的name重复了. 解决方案: 一天一个小Bug
- Digispark(ATTINY85) 微型开发板驱动安装与开发环境配置教程
前几天无聊就弄了弄这个玩,网上教程可能有点杂,在这里就总结一下. Digispark开发板(也就是badusb)能干什么,自己搜去,/坏笑. 1.准备材料:Attiny85微型 USB接口开发板 Di ...
- Java线程问题(基础回顾)
1.概念:线程是运行程序(进程)中单个顺序的小程序,一个进程可以由多个线程组成,而这多个线程共享同一个存储空间,这使得线程间的通信比较容易.在一个多进程的程序中,如果要切换到另一个进程,需要改变地址空 ...