您的位置:首页 > 其它

Castle的自定义类型转换

2008-05-14 17:05 141 查看
自定义类型Observer的定义如下:

[Serializable]

public class Observer

因为是数据配置文件可以写入如下形式

<Observers>

<item type="CSDN.Space.UpdatingService.ComponentModel.Observer">

<item><![CDATA[<Observer><IUpdatingSenderImplement>UpdatingSenderForUpdatingObserver1</IUpdatingSenderImplement></Observer>]]></item>

<item><![CDATA[<Observer><IUpdatingSenderImplement>UpdatingSenderForUpdatingObserver2</IUpdatingSenderImplement></Observer>]]></item>

</item>

</Observers>

因为Observer不是系统自带类型,需要为其编写自定义转换的实现

public class ObserverTypeConverter : AbstractTypeConverter

internal class ContainerBuilder

{

private static readonly object ton = new object();

private static IWindsorContainer container = null;

public static IWindsorContainer Create()

{

string subPath = ConfigurationManager.AppSettings["UpdatingService.Components.ConfigurationPath"];

string fileName = "";

HttpContext context = HttpContext.Current;

if (context != null)

{

fileName = context.Server.MapPath(String.Format("~/{0}", subPath));

}

else

{

//支持非网站程序

fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, subPath);

}

IWindsorContainer iWindsorContainer = Create(fileName);

//添加类型转换器

IKernel kernel = iWindsorContainer.Kernel;

IConversionManager conversionManager = (IConversionManager)kernel.GetSubSystem(SubSystemConstants.ConversionManagerKey);

conversionManager.Add(new ObserverTypeConverter());

return iWindsorContainer;

}

private static IWindsorContainer Create(string fileName)

{

if (container == null)

{

lock (ton)

{

if (container == null)

{

container = new WindsorContainer(new XmlInterpreter(fileName));

}

}

}

return container;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: