Castle的自定义类型转换
public class Observer
{
/**//// <summary>
/// IUpdatingSender的实现
/// </summary>
//[XmlAttribute(AttributeName="IUpdatingSenderImplement")]
public string IUpdatingSenderImplement { get; set; }
}
现希望通过Castle注入属性
因为是数据配置文件可以写入如下形式
<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不是系统自带类型,需要为其编写自定义转换的实现
{
private NLog.Logger logger = NLog.LogManager.GetLogger("ObserverTypeConverter");
public override bool CanHandleType(Type type)
{
return type.IsAssignableFrom(typeof(Observer));
}
public override object PerformConversion(string value, Type targetType)
{
return (Observer)Serializer.UTF8.ConvertToObject(value, targetType);
}
public override object PerformConversion(IConfiguration configuration, Type targetType)
{
//logger.Debug("Name={0},Value={1},Count={2}", configuration.Name, configuration.Value, configuration.Attributes.Count);
return PerformConversion(configuration.Value, targetType);
}
}
其中(Observer)Serializer.UTF8.ConvertToObject(value, targetType);实质是把
<![CDATA[<Observer><IUpdatingSenderImplement>UpdatingSenderForUpdatingObserver1</IUpdatingSenderImplement></Observer>]]>
的内容反序化为Observer对象
完成ObserverTypeConverter的定义后需要添加到容器IConversionManager中.
{
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;
}
}
转载于:https://www.cnblogs.com/chenjunbiao/archive/2008/05/14/1760214.html
Castle的自定义类型转换相关推荐
- 【.NET深呼吸】基础:自定义类型转换
照例,老周在开始吹牛之前,先讲讲小故事,这是朋友提出的建议,老TMD写技术有什么了不起的,人人都会写.后来老周想想,也确实,代码谁不会写,能写到有品位有感悟,就不容易做到.于是,老周接受了该朋友的建议 ...
- C#构造函数、操作符重载以及自定义类型转换
构造器 构造器(构造函数)是将类型的实例初始化的特殊方法.构造器可分为实例构造器和类型构造器,本节将详细介绍有关内容. 实例构造器 顾名思义,实例构造器的作用就是对类型的实例进行初始化.如果类没有显示 ...
- AutoMapper搬运工之自定义类型转换
前言 最近还挺忙,还有点累,一直都没更新了,实在是懒呀.正题之前先说点别的,最近公司要扩张了,需要大量开发,领导说推荐有钱可以拿,如此好机会,我就趁机做个广告.ShippingRen.com招募.NE ...
- day29Struts 类型转换和自定义类型转换,input视图
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC"-/ ...
- C# 自定义类型转换
1.显式转换和隐式转换: int a=123; long b=a; // 从int到long的隐式转换 int c=(int) b; // 从long到int是显式转换 --------------- ...
- java list 自定义类型转换_java – 可以从List生成平面XML结构的XStream自定义转换器?...
我正在使用XStream,并且有一个类如下的字段: private Map data; 我想生成这样的XML输出: test data test data test data 所以我希望map键成为元 ...
- 玩转spring mvc入参自定义类型转换和格式化
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 概述 最近小胖哥搞了个小程序,有几个spring mvc 接口传递了时间,时间用java 8 ...
- python自定义类型转换_Python JSONDecoder自定义null类型的转换
更新12/30/2014 实现这一目标的最简单方法是使用JSONDecoder的object_hook回调,如下面的旧答案中所述.但是,由于这需要对数据中的每个键值对进行额外的函数调用,这可能会对性能 ...
- struts2.x自定义类型转换
struts2的类型转换是基于OGNL(对象图像导航语言) 1 OGNL里面有一个接口TypeConverter,该接口有一个方法convertValue,convertValue该方法很复杂,里 ...
最新文章
- Nginx问题定位之监控进程异常退出
- c#+mysql 中文乱码
- AsyncTask中各个函数详细的调用过程,初步实现异步任务
- 虚拟机扩容后mysql无法使用_VMWARE 扩容踩坑记
- 深度学习过拟合解决方案
- VirtualBox没有64位选项,无法安装64位的解决方法 感谢源作者
- 计算机基础知识数据结构与算法,(计算机基础知识)[数据结构与算法] 图
- Windows phone7 开发-Zune software is not launched 【转】
- 2.深度学习练习:Logistic Regression with a Neural Network mindset
- php 设置 server 变量,php 服务器变量 $_SERVER
- 世界之窗如何保存html,世界之窗(文字版)
- 2022年锂行业研究报告
- 10款白嫖网站笔记整理
- 数据存储的未来,磁带是赢家?!
- 蚂蚁金服自研架构 SOFA 背后的工程师|1024快乐
- windows .exe 文件默认打开方式变成记事本的解决方法
- 【js逆向】md5加密参数破解
- win10计算机联接多个网络,如何设置win10电脑连接两个显示器?
- 计算机语言的学习方法
- Ubuntu18.04安装Pycharm并将其添加至左侧收藏夹
热门文章
- DID会固定年份吗_倍分法DID详解 (二):多时点 DID (渐进DID)
- python 识别图形验证码_Python图片验证码降噪处理实例!此乃识别验证码神技!...
- 电脑主页面上的计算机没了,电脑界面上的internet explorer 没有了
- java正则出现次数_正则表达式(二)—匹配次数的正则
- 计算机图形学前沿领域的设想,计算机图形学
- 图像的输入\输出和显示
- python利器能下载库吗_效率倍增!5款超级好用的Python工具库!
- 计算机的新应用论文,计算机教学应用的新创新模式论文原稿
- android imageview图片崩溃,android - setImageResource导致应用程序崩溃 - 堆栈内存溢出...
- 照片浏览器_照片审核不通过!这可能是史上最亏的中级失败理由!