反射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. (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>();
  1. (2)IContainer.Resolve():解析某个接口的实例。
  2. (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");
  1. (4)IContainer.ResolveNamed(string name):解析某个接口的“命名实例”。
  2. (5)builder.RegisterType().Keyed(Enum enum):以枚举的方式为一个接口注册不同的实例。
  3. (6)IContainer.ResolveKeyed(Enum enum):根据枚举值解析某个接口的特定实例。
  4. (7)builder.RegisterType().InstancePerDependency():用于控制对象的生命周期,每次加载实例时都是新建一个实例,默认就是这种方式
  5. (8)builder.RegisterType().SingleInstance():用于控制对象的生命周期,每次加载实例时都是返回同一个实例
  6. (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的更多相关文章

  1. Ioc容器Autofac系列(1)-- 初窥

     一.前言 第一次接触Autofac是因为CMS系统--Orchard,后来在一个开源爬虫系统--NCrawler中也碰到过,随着深入了解,我越发觉得Ioc容器是Web开发中必不可少的利器.那么,Io ...

  2. Orchard学习 01、orchard日志

    一.日志模块类图 1.ILogger接口及实现 2.ILoggerFactory接口及实现 3.其他 二.NullLogger类型     NullLogger类型是实现ILogger接口的空类型.它 ...

  3. [转]Ioc容器Autofac

    本文转自:http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041.html Ioc容器Autofac系列(1)-- 初窥   前言 第一次接触A ...

  4. 213. Orchard学习 二 3、001.IOrchardHost 与Autofac

    继前篇,在Orchard Application_Start() -> HostInitialization() 里,调用 OrchardStarter.CreateHost创建IOrchard ...

  5. [翻译]Orchard如何工作

    Orchard一直是博主心中神一般的存在,由于水平比较菜,Orchard代码又比较复杂看了几次都不了了之了.这次下定决心要搞懂其工作原理,争取可以在自己的项目中有所应用.为了入门先到官网去学习一下相关 ...

  6. 微软CMS项目 Orchard 所用到的开源项目

    研发了Orchard一年左右了,时常遇到瓶颈,总觉得力不从心,其实并不是基础不够,关键还是概念性的东西太多,一会儿这个概念名词,一会那个,关于Orchard的技术文档也的确很少,每次看起来总是焦头烂额 ...

  7. Orchard 微软CMS项目介绍

    我之前的项目中使用了Orchard, 它依据依赖注入的思想而做的模块化让我深深为之着迷,这里开始宣传一下这个架构. 包含的概念非常之多,我现在也不甚了解.Orchard就是自己想控制它改变它的话需要非 ...

  8. Autofac全面解析系列(版本:3.5) – [使用篇(推荐篇):1.类型注册]

    前言 Autofac Autofac是一套高效的依赖注入框架. Autofac官方网站:http://autofac.org/ Autofac在Github上的开源项目:https://github. ...

  9. Orchard源码分析(7.2):Controller相关

    概述 默认情况下,ASP.NET MVC内置的DefaultControllerFactory负责Controller实例的创建.Orchard定义了一个继承自DefaultControllerFac ...

随机推荐

  1. HTML1网页三部份内容

    网页三部份内容:HTML CSS Javascript 路径:一般做网页的时候用的相对路径. images/aaa.jpg 网页同一个目录中找images文件夹,再在images里面找aaa.jpg ...

  2. 【衡阳八中noip模拟题】国色天香

    庭前芍药妖无格,池上芙蕖净少情.唯有牡丹真国色,花开时节动京城.——唐·刘禹锡<赏牡丹>芍药花再红终究妖艳无格.终不及牡丹,国色天香.——乌拉那拉氏宜修华妃总是想要用自己的气焰打压皇后,正 ...

  3. PS切图保存后的背景图为透明

    1.若想PS切图保存后的背景图为透明,那么则需要在如下图中所示的修改即可,切图后[文件]——>[存储为web格式]——>[PNG-24]: 2.要想在css中的背景图片为相通,则先剪切一个 ...

  4. thinkphp从数据库里的html代码显示页面不解析

    首先,这个问题不应该出现在这里,因为以前在用ThinkPHP3.1.2的时候,利用富文本编辑器保存文本后,直接从数据库里面取出的数据都能正常显示,改用ThinkPHP3.2.3之后,thinkphp从 ...

  5. ckeditor编辑器在java项目中配置

    一.基本使用: 1.所需文件架包 A. Ckeditor基本文件包,比如:ckeditor_3.6.2.zip 下载地址:http://ckeditor.com/download 2.配置使用 A.将 ...

  6. Android UI ActionBar功能-在 Action Bar 上添加按钮

    在ActionBar上添加按钮实现某些功能最常见的Application的功能如:在ActionBar上添加一个搜索按钮: 首先官方文档说明:http://wear.techbrood.com/tra ...

  7. 5.4const对象

    常成员函数 一个const对象可以调用const函数,但不能调用非const成员函数.必须将关键字const放在函数参数表之后,才能说明该函数是一个const成员函数. 声明常成员函数的格式如下: 类 ...

  8. UITabBarController使用详解

    UITabBarController是IOS中很常用的一个viewController,例如系统的闹钟程序,ipod 程序等.UITabBarController通常作为整个程序的rootViewCo ...

  9. varnish和squid的对比

    Varnish与Squid的对比  说到Varnish,不能不提Squid,Squid是一个高性能的代理缓存服务器,它和varnish之间有诸多的异同点,这里分析如下:  下面是他们之间的相同点:   ...

  10. 学习Java这几个快捷键你得知道(不断更新中)

    java中的System.out.println();的快捷键    --------先输入sysout  在按 alt + /