您所在的位置: 首页>>读书频道>>设计开发>>.Net系列>>

8.3.2 使用Castle实现IOC和DI开发

http://book.51cto.com  2008-03-19 19:06  罗江华 朱永光  电子工业出版社  我要评论(0)
  • 摘要:《.NET Web高级开发》可以使读者通过阅读进一步的了解和掌握.NET,本文介绍如何使用Castle实现IOC和DI开发。
  • 标签:.NET  web  Castle

8.3.2  使用Castle实现IOC和DI开发

Castle是一个著名的原生.NET开源项目,Castle的目标是实现一个全方位的整合框架,在 Castle框架下实现多个子框架的组合,这些子框架之间彼此可以独立,也可以使用其他的框架方案加以替代,Castle希望提供 one-stop shop 的框架整合方案。目前Castle最新版本说RC3,可以通过这里(http://www.castleproject.org/)来下载。它包含了:

·MicroKernel/Windsor 实现的IOC容器

·ActiveRecord实现持久层O/R M解决方案

· MonoRail实现Web框架

·Aspect#实现AOP框架

·一些辅助功能和服务
我们接着上一节的电影列表的例子来介绍一下Castle如何进行依赖注入的开发。
首先我们创建如下一个XML文件来保存电影列表:

<?xml version="1.0" encoding="utf-8" ?>
<Movies>
<Movie Name="A-1" Director="Zyg"/>
<Movie Name="A-2" Director="Zyg"/>
<Movie Name="B-1" Director="Kevin"/>
<Movie Name="B-2" Director="Kevin"/>
<Movie Name="B-3" Director="Kevin"/>
</Movies>

对应这个XML文件,创建一个XmlFileMovieFinder的类:

class XmlFileMovieFinder : IMovieFinder
{
#region IMovieFinder Members
public IList<Movie> FindAll()
{
XmlDocument doc = new XmlDocument();
doc.Load("Movies.xml");
List<Movie> lst = new List<Movie>();
Movie m;
foreach (XmlNode node in doc.GetElementsByTagName("Movie"))
{
m = new Movie();
m.Name = node.Attributes["Name"].Value;
m.Director = node.Attributes["Director"].Value;
lst.Add(m);
}
return lst;
}
#endregion
}

在项目中引用Castle.Core、Castle.DynamicProxy、Castle.MicroKernel和Castle.Windsor程序集。

然后,修改MovieLister类中的构造器来使用Castle的IOC容器,具体的步骤通过代码中的注释来说明:

class MovieLister
{
private IMovieFinder finder;
public MovieLister()
{
//建立容器
WindsorContainer container =
new WindsorContainer(new XmlInterpreter());
//获取IMovieFinder的实例
finder = container.Resolve<IMovieFinder>();
}

只有上面的代码当然不能实现依赖注入,我们还需要在配置文件中添加如下内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="castle"
type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler,
Castle.Windsor" />
</configSections>
<castle>
<components>
<component id="movieFinder.service"
service="NWAD_8_1.IMovieFinder, NWAD_8_1"
type="NWAD_8_1.XmlFileMovieFinder, NWAD_8_1">
</component>
</components>
</castle>
</configuration>

这样就可以在运行时,根据配置文件注入IMovieFinder接口的具体实现。在这个例子中,我们使用的是构造器注入方式,有兴趣的读者可以自己尝试其他注入方式。


回书目   上一节   下一节
企业级Web2.0 你准备好了么?
WebSphere 实现SOA的利器
Web安全云时代
企业Web安全威胁在线评估系统
专题:ASP.NET 2.0基础开发指南
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有