企业开发框架NHibernate和Spring.Net简介-4

企业开发框架NHibernate和Spring.Net简介-4
2008-03-24 14:00
(2)获得IApplicationContext应用。代码如下所示:
#001 using System;
#002 using System.Configuration;
#003 using Spring.Context;
#004 ...
#005 public static void Main ()
#006 { IApplicationContext ctx = ContextRegistry.GetContext();}
#007 ...
如上所述,using System.Configuratoin和using Spring.Context两条using语句被加到了MovieApp类文件中。其中,System.Configuration命名空间可以让应用程序存取保存在配置文件中的Spring.NET的IoC容器的定义;Spring.Context命名空间可以让应用程序存取IApplicationContext类,这个类是应用程序存取Spring.NET所提供的功能的主要方法。
方法main获得一个IApplicationContext的实现,它的配置信息已经被写在应用程序配置文件内名为<objects/>的节中。
(3)第一个对象的定义。到目前为止,在应用程序配置文件中还没有对象定义,所以下面定义一个对象。MovieLister实例的XML定义如下所示。
#001 ...
#002 <objects>
#003    <object name="MyMovieLister"
#004           type="Spring.Examples.MovieFinder.MovieLister, Spring.Examples.MovieFinder">
#005    </object>
#006 </object>
#007 ...
#003行:MyMovieLister是该对象的唯一标识符,使用这个标识符,这个对象的实例就能够被如下所示的代码中的IApplicationContext引用所获取。
#001 ...
#002 public static void Main ()
#003    { IApplicationContext ctx = ContextRegistry.GetContext();
#004      MovieLister lister = (MovieLister) ctx.GetObject ("MyMovieLister");}
#005 ...
lister实例仍然没有与IMovieFinder接口相应的实现注入。此时如果使用MoviesDirectedBy方法会导致NullReferenceException异常发生,因为lister实例仍然还没有对IMovieFinder的引用。注入到lister实例中的IMovieFinder接口实现的XML配置定义如下。
#001 ...
#002     <objects>
#003        ...
#004        <object name="MyMovieFinder"
#005       type="Spring.Examples.MovieFinder.SimpleMovieFinder, Spring.Examples.MovieFinder"/>
#006        </object>
#007         ...
#008     </object>
#009 ...
(4)设值注入。下面要做的是把以MyMovieFinder为标识符的IMovieFinder实例注入到以MyMovieLister为标识符的MovieLister实例中。这个注入动作使用设值注入的方法,代码如下所示:
#001 ...
#002 <objects>
#003 <object name="MyMovieLister"
#004 type="Spring.Examples.MovieFinder.MovieLister, Spring.Examples.MovieFinder">
#005 <!-- using setter injection... -->
#006 <property name="movieFinder" ref="MyMovieFinder"/>
#007 </object>
#008 <object name="MyMovieFinder"
#009 type="Spring.Examples.MovieFinder.SimpleMovieFinder, Spring.Examples.MovieFinder"/>
#010 </object>
#011 </objects>
#012 ...
当IApplicationContext接口取得了MyMovieLister对象以后,Spring.NET的IoC容器将会把对MyMovieLister对象的引用注入到MyMovieLister对象的MovieFinder属性中去。这样,在程序中引用的MovieFinder对象即配置完毕,可以列出某导演导过的所有电影。
#001 ...
#002 public static void Main ()
#003 {
#004 IApplicationContext ctx = ContextRegistry.GetContext();
#005 MovieLister lister = (MovieLister) ctx.GetObject ("MyMovieLister");
#006 Movie[] movies = lister.MoviesDirectedBy("Roberto Benigni");
#007 Console.WriteLine ("\nSearching for movie...\n");
#008 foreach (Movie movie in movies)
#009 {Console.WriteLine (
#010 string.Format ("Movie Title = '{0}', Director = '{1}'.",
#011 movie.Title, movie.Director));}
#012 Console.WriteLine ("\nMovieApp Done.\n\n");
#013 }
#014 ...也可以使用构造注入的方法,读者可以自己考虑构造注入方法的实现方式,这里就不再具体介绍。
现在Spring.Net的1.0.2版本已经发布,读者可以通过访问http://sourceforge.net/ projects/ springnet下载。
posted @ 2008-09-05 09:45  YFeng_Lee  阅读(519)  评论(0编辑  收藏  举报