当前位置 > 首页 > Asp.net

.Net下实现可扩展的编程方法简述

2012-12-7 15:53:00来源:Asp.net

IoC控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则用来解决系统耦合问题。 控制反转还有一个名字叫做依赖注入(DI:Dependency Injection)。IoC中最基本的技术就是interface + reflection,“反射(Reflection)”编程。 。" IoC 容器的职责是对象的创建,核心是对象的生命周期管理(何时创建/怎么创建/何时销毁),就像一个大工厂,对象“托管”在里面。模式的源头都是 SOLID(面向对象的原则)。利用IOC 解耦的核心是:面向抽象,而非实现。即我们只需要关注某一个对象能做什么,怎么用;不需要关注它怎么来,更不需要我们来管理它。
1,Unity
Unity是Enterprise Library 4.0开始加入的一个轻量级的、可扩展的依赖注入容器。
Unity模块包括了下面的特点  
•  提供了一个创建对象,以及依赖的对象的方法  
•  提供的RegisterType方法用来在容器中注册类型和映射,Resolve方法可以返回任何依赖对象的实例。  
•  提供控制反转IOC功能,通过预先配置注入类的对象来实现。你可以在构造函数中指明一个类或者接口(构造函数注入),或者是使用attribute的属性注入,和方法调用注入。
•  支持容器继承,容器可以有子容器,支持对象从子容器传递到父容器中。  
•  可以从标准的配置文件中读取信息,例如xml文件  
•  在运行时可以配置和改变依赖关系。  
•  对类的定义没有任何要求。在类上不需要添加attribute(除非使用属性注入或者是方法调用注入),在类声明中没有任何限制。  
•  支持自定义容器,例如,你可以在方法中实现额外的对象构造,和容器功能,例如容器的缓存功能。

三种注入方式:
•构造器注入(Constructor Injection):IoC容器会智能地选择选择和调用适合的构造函数以创建依赖的对象。如果被选择的构造函数具有相应的参数,IoC容器在调用构造函数之前会自定义创建相应参数对象;
•属性注入(Property Injection):如果需要使用到被依赖对象的某个属性,在被依赖对象被创建之后,IoC容器会自动初始化该属性;
• 方法注入(Method Injection):如果被依赖对象需要调用某个方法进行相应的初始化,在该对象创建之后,IoC容器会自动调用该方法。

定义一个接口:

public interface ILogger
{
void Write(string message);
}

实现接口用来扩展应用程序:

public class FlatFileLogger : ILogger
{
public void Write(string message)
{
Console.WriteLine(String.Format(
"Message:{0}", message));
Console.WriteLine(
"Target:FlatFile");
}
}

主程序:

class Program
{
static void Main(string[] args)
{
ILogger logger
= GetLogger();
logger.Write(
"Test");
System.Console.ReadLine();
}
/// <summary>
/// 加载日志处理对象
/// </summary>
/// <returns></returns>
public static ILogger GetLogger()
{
//初始化一个容器
IUnityContainer container = new UnityContainer();
//获取unity配置
UnityConfigurationSection config = ConfigurationManager.GetSection("unity") as UnityConfigurationSection;
UnityConfigurationSection.CurrentSection.Configure(container);
//向容器中注册对象
ILogger defaultLogger = container.Resolve<ILogger>("Logger");
return defaultLogger;
}
}

扩展配置:

<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity>
<typeAliases>

  • 利用电信能力开放平台轻松开发短信应用

    2009-12-5 0:52:00

    阅读: 294 评论: 0 作者: 亚历山大同志 发表于 2009-12-04 22:39 原文链接 中国电信在最近开放了其能力平台,现在这个项目正处于beta1的状态,利用能力平台,开发

  • 还是VS2005全角问题

    2007-2-6 20:44:00

    摘要: 这下微软出补丁了,只是微软没有提供下载链接。大家可以…… 阅读全文 南疯 2007-02-06 20:04 发表评论

  • 博客园电子期刊2009年7月刊发布啦

    2009-8-4 14:49:00

    博客园电子期刊No22.2009年7月刊 您是否为错过博客园精彩博文而苦苦寻找?您是否需要温故而新的机会?博客园电子期刊为您准备了这一切!为您精心挑选并整理了

  • 扩展方法(2) GridView单元格合并

    2009-5-21 0:25:00

    大家GridView都用的比较多吧.. 有没遇到单元格需要合并的需求.. 单元格合并原理其实很简单,就是逐行判断要合并的单元格里的值是否和上一行的相同,要是相同的话就合并,不同的话就接着判断

  • NHibetnate+spring.net+jquery打造UI控件库系列(两部分)------页面布局

    2011-1-12 0:17:00

    今天吃了5碗白饭,战斗力超强吧。心情好,当然要抽点时间写点东西哦。 接着上篇 UI核心库 ,今天主要实现了界面布局,当然是一般的布局,不能和EXT的布局相提并论的。我也不喜欢EXT的布局,

  • Asp.net安全架构之4:Brute force(爆破)

    2012-6-13 8:27:00

    原理 爆破是对系统的登录入口发起不间断的请求,达到暴力破解的目的。 实际案例 某系统存在爆破攻击点,只要模拟以下攻击,就能采用字典破解法,根据分析发现,只要返回状态为302的,为用户名密

  • re: 用Baidu搜索&ldquo;sb&rdquo;,居然第一个就是Google?!

    2007-2-28 5:04:00

    @Jeffrey Zhao 我也只能查到sb是safe browsing,但到底如何safe呢? Cat Chen 2007-02-28 01:11 发表评论

  • [翻译]开发自己的web站点管理工具(Website Administration Tool)(2)

    2007-6-17 20:43:00

    摘要: 本文是该系列文章的第二部分,也是最后一部分,在这里我会详细讲解上一篇文章中没有说明的一些要点: 角色管理和访问规则管理。 你可以在本文的结尾处下载我写的WSAT程序的全部代码。 阅读全文

  • 分享:基于UDP协议实现可靠的数据传输

    2007-3-26 11:36:00

    这几天一直在研究P2P相关的技术,对于底层的传输使用了UDP协议,但是大家都知道UDP协议是不可靠的,如果在传输对话信息或文件的时候发生丢包,那么就会造成数据出错;即使不丢包,UDP协议也不能保证接

  • Presenting in Europe Next Week

    2009-11-27 18:09:00

    I’m off to Europe next week to do a bunch of technical presentations.  I’m presenting for 5-6