Autofac 控制反转
class Program
{
static void Main(string[] args)
{
IContainer container = Init();
Go(container); Console.WriteLine("========================"); ISchool a = container.Resolve<ISchool>();
a.FangXue(); Console.ReadKey();
}
static IContainer Init()
{
ContainerBuilder builder = new ContainerBuilder();
Assembly asm = Assembly.Load(Assembly.GetExecutingAssembly().GetName().Name);
builder.RegisterAssemblyTypes(asm).AsImplementedInterfaces().PropertiesAutowired().SingleInstance();
//SingleInstance()单例,共享同一个对象,PropertiesAutowired()属性自动注入
IContainer container = builder.Build();
return container;
}
static void Go(IContainer container)
{
IDogBLL schoolBll = container.Resolve<IDogBLL>();
schoolBll.Bark();
IDogBLL schoolBll2 = container.Resolve<IDogBLL>();
Console.WriteLine(schoolBll.Equals(schoolBll2));
}
}
public interface IDogBLL
{
void Bark();
}
public class DogBLL : IDogBLL
{
public void Bark()
{
Console.WriteLine("汪汪汪");
}
}
public interface ISchool
{
void FangXue();
}
public class School : ISchool
{
public IDogBLL dogBll { get; set; }
public void FangXue()
{
dogBll.Bark();
Console.WriteLine("放学了");
}
}
Autofac.Mvc
private void AutoFacMvc()
{
//using Autofac.Integration.Mvc;
ContainerBuilder builder = new ContainerBuilder();
// 把当前的 程序集中的 Controller 都注册
builder.RegisterControllers(typeof(MvcApplication).Assembly).PropertiesAutowired();
// 不要忘了.PropertiesAutowired()
Assembly asm = Assembly.Load("TestService"); //获取所有相关类库的程序集
builder.RegisterAssemblyTypes(asm).Where(e => !e.IsAbstract).AsImplementedInterfaces().PropertiesAutowired(); // 把当前的 程序集中的 所有类 都注册
builder.RegisterAssemblyTypes(typeof(MvcApplication).Assembly).PropertiesAutowired(); Autofac.IContainer container = builder.Build();
//注册系统级别的 DependencyResolver,
//这样当 MVC框架创建Controller等对象的时候都是管Autofac要对象。
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); //!!!
}
Autofac.Mvc单独注册
var test = DependencyResolver.Current.GetService<TestHelper>();
var res = test.GetDateTime();
不在Mvc线程里单独注册
var container = AutofacDependencyResolver.Current.ApplicationContainer;
using (container.BeginLifetimeScope())
{
var citySvc = container.Resolve<ICityService>();
}
Autofac 控制反转的更多相关文章
- AutoFac控制反转
一.AutoFac介绍 Autofac是.NET里IOC(Inversion of Control,控制反转)容器的一种,同类的框架还有Spring.NET,Unity,Castle等.可以通过NuG ...
- AutoFac控制反转 转载https://blog.csdn.net/u011301348/article/details/82256791
一.AutoFac介绍 Autofac是.NET里IOC(Inversion of Control,控制反转)容器的一种,同类的框架还有Spring.NET,Unity,Castle等.可以通过NuG ...
- AutoFac (控制反转IOC 与依赖注入DI)
重要的参考资料http://www.cnblogs.com/xdp-gacl/p/4249939.html 谈谈对Spring IOC的理解 IOC概念(很重要) 项目 先引入AutoFac 和Aut ...
- 如何在asp.net mvc 中使用Autofac 控制反转(Ioc)
前言 最近看了一些关于Ioc方面的开源项目,里面的类跳来转去,看的迷迷糊糊的.项目里根本不需要这么“复杂的”设计,只需简单完成Ico,达到解耦的目的,并且能高效的完成项目.于是参考autofac的官网 ...
- C#开发微信门户及应用(42)--使用Autofac实现微信接口处理的控制反转处理
在很多情况下,我们利用IOC控制反转可以很方便实现一些接口的适配处理,可以在需要的时候切换不同的接口实现,使用这种方式在调用的时候,只需要知道相应的接口接口,具体调用哪个实现类,可以在配置文件中动态指 ...
- IoC实践--用Autofac实现MVC5.0的IoC控制反转方法
Autofac是一个.net平台下发性能还不错的IoC框架,利用它可以实现依赖注入和控制反转,使自己的软件模块之间的耦合性大大降低,让软件扩展.维护更加容易.控制反转(Inversion of Con ...
- 【AutoFac】依赖注入和控制反转的使用
在开始之前首先解释一下我认为的依赖注入和控制反转的意思.(新手理解,哪里说得不正确还请指正和见谅) 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的 ...
- ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下
先简单了解一这个几个 名词的意思. 控制反转(IOC) 依赖注入(DI) 并不是某种技术. 而是一种思想.一种面向对象编程法则 什么是控制反转(IOC)? 什么是依赖注入(DI) 可以点击下面链接 ...
- Git使用总结 Asp.net生命周期与Http协议 托管代码与非托管代码的区别 通过IEnumerable接口遍历数据 依赖注入与控制反转 C#多线程——优先级 AutoFac容器初步 C#特性详解 C#特性详解 WPF 可触摸移动的ScrollViewer控件 .NET(C#)能开发出什么样的APP?盘点那些通过Smobiler开发的移动应用
一,原理 首先,我们要明白Git是什么,它是一个管理工具或软件,用来管理什么的呢?当然是在软件开发过程中管理软件或者文件的不同版本的工具,一些作家也可以用这个管理自己创作的文本文件,由Linus开发的 ...
随机推荐
- javascript 数组总结
数组的创建: 数组可以使用Array构造函数来创建,或者使用[]快速创建. 1. Array构造函数创建数组: 无参数,创建空数组: var arry = new Array(); 参数为一个数字,指 ...
- srm 539
http://mlz000.github.io/2015/07/15/srm-539/ 250 Description: 从若干个盒子中随意选择几个装石头.每一个盒子容量都有上下限,一旦选择使用某个盒 ...
- 怎样编辑LRC歌词
恭喜恭喜歌词 唐嫣 - 音乐巴士 http://www.yy8844.cn/geci/mswcn/nvunns.shtml 恭喜恭喜歌词感谢 音乐巴士 珍妮 编辑歌词匹配时间为: 03 分 06 秒 ...
- Git:代码冲突常见解决方法【转】
本文转载自:http://blog.csdn.net/iefreer/article/details/7679631 如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时 ...
- YTU 2797: 复仇者联盟之关灯
2797: 复仇者联盟之关灯 时间限制: 1 Sec 内存限制: 128 MB 提交: 563 解决: 160 题目描述 输入n(1~500)盏灯并编号,输入1~9(包含1和9)的数字m,灭掉编号 ...
- java使用poi读取word(简单,简约,直观)
java使用poi读取word(简单,简约,直观) 说明 其实poi的官网上面都是有接口和样例的,只是都是英文 例如网址:http://poi.apache.org/spreadsheet/quick ...
- HTML5浏览器嵌入窗口程序解决方案
浏览器嵌入窗口程序一直以来就是WEB应用程序的首选方案,这种方案只需要实现一个主窗口,并提供一些接口供脚本调用,内部的界面和逻辑处理全部用html,css,javascript去实现.我最早看到的相关 ...
- B1090 [SCOI2003]字符串折叠 区间dp
又一道区间dp,和上一篇类似,但是比他简单,这个只有两种转移方法,不是很复杂.直接判断是否为重复的串就行. 题干: Description 折叠的定义如下: . 一个字符串可以看成它自身的折叠.记作S ...
- 67.员工职位变动js
1.员工职位jsp <%@ page language="java" import="java.util.*" pageEncoding="UT ...
- webview加载本地页面
main.xml中布局webview,activity中设置如下 MyWebView=(WebView)findViewById(R.id.webView1); MyWebView.requestFo ...