体验Castle中从配置文件注册组件以及传递参数的一个小例子

最近看了一些 IOC 模式的介绍以及关于 Castle 的文章,从网上下下来关于 Introducing Castle PartI 的例子,不过在运行的时候出现错误,老是提示 "Could not resolve non-optional dependency for smtpemailsender. Parameter 'host' type String" 。最后决定自己做个简单的例子来体验一下,要做就作最简单的,只有一个组件。所需要的 Castle 的库是 Castle.Windor.dll,Castle.DynamicProxy.dll,Caslte.Model.dll,Castle.MicroKernel.dll.
None.gif using  System;
None.gif
None.gif
namespace  IOC.Test.Component
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// MyComponent1 's abstract。
ExpandedSubBlockEnd.gif    
/// </summary>

InBlock.gif    public class MyComponent1
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
private String _name = null ;
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//*
InBlock.gif        // If I make the constructor with none parameters be valid. It will be ok. 
InBlock.gif        public MyComponent1()
InBlock.gif        {
InBlock.gif            _name = "default";
InBlock.gif        }
ExpandedSubBlockEnd.gif        
*/

InBlock.gif        
public MyComponent1(String name)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            _name 
= name;
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public string Introducing()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return "My name is "+_name;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif

 

这里是调用的代码.

 

None.gif static   void  Main() 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
//开始采用改构造函数创建实例不行,最后去网上需求hamment的帮助
InBlock.gif    
//WindsorContainer container = new WindsorContainer( @"..\..\app.config" );
InBlock.gif
    
InBlock.gif    WindsorContainer container 
= new WindsorContainer( new XmlInterpreter(  ) );
InBlock.gif    
InBlock.gif    
//这里如果组件已经在配置文件中说明的话,那么就不需要在这里重复注册了
InBlock.gif    
//container.AddComponent("myCompo1",typeof(MyComponent1));
InBlock.gif
    MyComponent1 myCompo1 = (MyComponent1)container["myCompo1"];
InBlock.gif    MessageBox.Show(
"hello,"+myCompo1.Introducing());
ExpandedBlockEnd.gif}

None.gif

 

注意这里好象自己声明配置文件老是不生效,(我也正纳闷原因是啥呢,谁知道了告诉我)只有默认的配置文件才生效,对于Web的话,默认的是web.config,对于windows程序,默认是可执行程序名称.config.譬如我的可执行程序名字是IOC.Test.exe,那么默认的配置文件就是IOC.Test.exe.config,该文件和可执行程序放在同一个文件夹中。

配置文件的内容如下
None.gif <? xml version = " 1.0 "  encoding = " utf-8 "   ?>  
None.gif
None.gif
< configuration >
None.gif
None.gif    
< configSections >
None.gif        
< section name = " castle "
None.gif          type
= " Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, 
None.gif
                Castle.Windsor "  />
None.gif
     </ configSections >
None.gif
None.gif    
< castle >
None.gif        
< components >
None.gif            
< component id = " myCompo1 "  Service = " IOC.Test.Component.MyComponent1,IOC.Test "  
None.gif
None.giftype
= " IOC.Test.Component.MyComponent1,IOC.Test " >
None.gif                
< parameters >
None.gif                    
< name > rhf </ name >
None.gif                
</ parameters >
None.gif            
</ component >
None.gif        
</ components >
None.gif    
</ castle >
None.gif
None.gif
</ configuration >
None.gif


好了,运行一下吧。这时候你将会看到,"Hello,My name is rhf".这么简单也是费了我好大的一番周折的,这里谢谢Hamment和fabio的热心帮助,详细讨论情况请看http://forum.castleproject.org/posts/list/0/356.page#1688

另外大家关于Castle有啥问题的话,可以上http://forum.castleproject.org需求帮助,好心的Hamment会帮助你的。

转载于:https://www.cnblogs.com/rhf035/archive/2006/01/13/316632.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值