通过Orchard认识的Autofac
反射Reflection
这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型(class)’组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息。
- 类似于早绑定与晚绑定的关系,晚绑定损耗效率,但可以提高程序的利用性和灵活性,并且能够带来设计上的便利。
- 应用:
- 通过反射获取类型;
- type.GetInterface("ITest")
- Type.GetType("System.String")
- Type.GetType("System.Data.DataTable,System.Data,Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
- 通过反射来遍历对象属性;
- 通过反射获取类型;
C#:
Test1 test = new Test1();
test.Id = 1;
test.Name = "语文";
test.Score = 87.5;
foreach (System.Reflection.PropertyInfo pi in test.GetType().GetProperties())
{
Console.WriteLine(pi.Name + ":" + pi.GetValue(test, null).ToString() + "<br />");
}
关于IOC和DI的理解
依赖倒置原则(DIP):一种软件架构设计的原则(抽象概念)。
DIP:依赖倒置原则,高层模块定义接口,低层模块负责实现。
控制反转(IoC):一种反转流、依赖和接口的方式(DIP的具体实现方式)。
IOC:Inversion of Control 控制反转,不是什么技术,是一种设计模式,为了解耦
依赖注入(DI):IoC的一种实现方式,用来反转依赖(IoC的具体实现方式)。
DI:Dependency Injection 依赖注入
IoC容器:依赖注入的框架,用来映射依赖,管理对象创建和生存周期(DI框架)。
比较官方的语言:应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。ioc
http://www.2cto.com/kf/201407/321182.html
AutoFac常用方法说明http://www.cnblogs.com/WeiGe/p/3871451.html
- (1)builder.RegisterType().As():注册类型及其实例。例如下面就是注册接口IDAL的实例SqlDAL
C#:
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<SqlDAL>().As<IDAL>();
IContainer container = builder.Build();
SqlDAL sqlDAL = (SqlDAL)container.Resolve<IDAL>();
- (2)IContainer.Resolve():解析某个接口的实例。
- (3)builder.RegisterType().Named(string name):为一个接口注册不同的实例。
C#:
builder.RegisterType<SqlDAL>().Named<IDAL>("sql");
builder.RegisterType<OracleDAL>().Named<IDAL>("oracle");
IContainer container = builder.Build();
SqlDAL sqlDAL = (SqlDAL)container.ResolveNamed<IDAL>("sql");
OracleDAL oracleDAL = (OracleDAL)container.ResolveNamed<IDAL>("oracle");
- (4)IContainer.ResolveNamed(string name):解析某个接口的“命名实例”。
- (5)builder.RegisterType().Keyed(Enum enum):以枚举的方式为一个接口注册不同的实例。
- (6)IContainer.ResolveKeyed(Enum enum):根据枚举值解析某个接口的特定实例。
- (7)builder.RegisterType().InstancePerDependency():用于控制对象的生命周期,每次加载实例时都是新建一个实例,默认就是这种方式
- (8)builder.RegisterType().SingleInstance():用于控制对象的生命周期,每次加载实例时都是返回同一个实例
- (9)IContainer.Resolve(NamedParameter namedParameter):在解析实例T时给其赋值
DBManager manager = container.Resolve(new NamedParameter("name", "SQL"));
通过配置的方式使用AutoFac http://developer.51cto.com/art/201407/446711_all.htm
C#:
static void Main(string[] args)
{
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<DBManager>();
builder.RegisterModule(new ConfigurationSettingsReader("autofac"));
using (IContainer container = builder.Build())
{
DBManager manager = container.Resolve<DBManager>();
manager.Add("INSERT INTO Persons VALUES ('Man', '25', 'WangW', 'Shanghai')");
}
autofac是.net一种最流行的依赖注入的框架,最终目标是为了解耦,直接切入点就是以接口编程为主导思想,杜绝类之间的耦合,以反射技术为基础,把依赖注入到相应的对象中。
属性注入
- 使用依赖注入容器时,大部分都是使用构造函数来注入或者是xml配置文件,也有很多支持属性注入。
- 对于一些使用特频繁的类或者方法,很多类都会用到,那么使用属性注入会节省更多的力气,而且在设计的时候就可以提早的把该属性给定义出来。
- http://www.cnblogs.com/n-pei/p/3417891.html
通过Orchard认识的Autofac的更多相关文章
- Ioc容器Autofac系列(1)-- 初窥
一.前言 第一次接触Autofac是因为CMS系统--Orchard,后来在一个开源爬虫系统--NCrawler中也碰到过,随着深入了解,我越发觉得Ioc容器是Web开发中必不可少的利器.那么,Io ...
- Orchard学习 01、orchard日志
一.日志模块类图 1.ILogger接口及实现 2.ILoggerFactory接口及实现 3.其他 二.NullLogger类型 NullLogger类型是实现ILogger接口的空类型.它 ...
- [转]Ioc容器Autofac
本文转自:http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041.html Ioc容器Autofac系列(1)-- 初窥 前言 第一次接触A ...
- 213. Orchard学习 二 3、001.IOrchardHost 与Autofac
继前篇,在Orchard Application_Start() -> HostInitialization() 里,调用 OrchardStarter.CreateHost创建IOrchard ...
- [翻译]Orchard如何工作
Orchard一直是博主心中神一般的存在,由于水平比较菜,Orchard代码又比较复杂看了几次都不了了之了.这次下定决心要搞懂其工作原理,争取可以在自己的项目中有所应用.为了入门先到官网去学习一下相关 ...
- 微软CMS项目 Orchard 所用到的开源项目
研发了Orchard一年左右了,时常遇到瓶颈,总觉得力不从心,其实并不是基础不够,关键还是概念性的东西太多,一会儿这个概念名词,一会那个,关于Orchard的技术文档也的确很少,每次看起来总是焦头烂额 ...
- Orchard 微软CMS项目介绍
我之前的项目中使用了Orchard, 它依据依赖注入的思想而做的模块化让我深深为之着迷,这里开始宣传一下这个架构. 包含的概念非常之多,我现在也不甚了解.Orchard就是自己想控制它改变它的话需要非 ...
- Autofac全面解析系列(版本:3.5) – [使用篇(推荐篇):1.类型注册]
前言 Autofac Autofac是一套高效的依赖注入框架. Autofac官方网站:http://autofac.org/ Autofac在Github上的开源项目:https://github. ...
- Orchard源码分析(7.2):Controller相关
概述 默认情况下,ASP.NET MVC内置的DefaultControllerFactory负责Controller实例的创建.Orchard定义了一个继承自DefaultControllerFac ...
随机推荐
- 安装MYSQL出现的问题
安装MYSQL接近三天了还是没有安装好,原因1:我觉得错误日志产生的原因是因为 计算机的名称是中文名 :小石头 瓦卡卡,果然是这个原因,折腾了三四天,最后换了系统!!!!把计算机名命名成了英文,果然一 ...
- 《C++ Primer Plus 6th》读书笔记 - 第十章 对象和类
1. 过程性编程和面向对象编程 2. 抽象和类 1. 使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数(或友元函数)来访问对象的私有成员 2. 可以在类声明之外定义成员函数,并使其成为内 ...
- n条直线的最多交点
#include <iostream>using namespace std;int main(){int i,n;while(cin>>n){if(n==0||n==1) c ...
- mysql学习(九)sql语句
SQL种类: DDL:数据定义语言 DML:数据操作语言 DQL:数据查询语言 DCL:数据控制语言 DDL: show databases; //查询数据库 create database if n ...
- C#.NET Split 的几种使用方法
第一种方法: string s = "abcdeabcdeabcde"; string[] sArray = s.Split('c'); foreach (string i in ...
- Java 中使用Jackson反序列化
Build.gradle: compile group: 'org.codehaus.jackson', name: 'jackson-mapper-lgpl', version: '1.9.13' ...
- python 学习day5(模块)
一.模块介绍 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能 ...
- CC++初学者编程教程(9) Windows8.1安装VS2013并捆绑QT与编程助手
我们在Windows8.1安装VS2013并捆绑QT与编程助手需要下列文件. 2. 在虚拟机中开启Windows8.1 3.然后选择VS2013的安装镜像. 4.将镜像复制到虚拟机. 5.我们装载这个 ...
- Udacity-Artificial Intelligence for Robotics 课程笔记
Lesson 1 Localization 蒙特卡洛机器人定位模型 sense 贝叶斯模型 move 全概率公式 localization练习 # The function localize take ...
- 网易云课堂_程序设计入门-C语言_第三周:循环_2数字特征值
2 数字特征值(5分) 题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作 ...