ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-Caslte Windsor代理生成选项

2019-11-20 17:05:34  阅读:250  来源: 互联网

标签:castle-windsor castle-dynamicproxy c


我一直在努力地在网上找到任何东西,所以我想我想看看是否有人知道如何解决我遇到的这个小问题.

我想创建一个代理对象,以便可以将其他各种接口添加到同一对象中.到目前为止,我对此还没有任何问题.我的其他要求之一是能够在代理生成的类上设置属性.

我已经能够使用Castle DynmaicProxy手动成功完成此任务,方法如下:

var serviceOptions = new ProxyGenerationOptions();

// Create MyAttribute
var args = new object[] { "SomeName" };
var constructorTypes = new[] { typeof(String) };
var constructorInfo = typeof(MyAttribute).GetConstructor(constructorTypes);
var attributeBuilder = new CustomAttributeBuilder(constructorInfo, args);

serviceOptions.AdditionalAttributes.Add(attributeBuilder);

但是,我正在使用windsor通过注入来解决我的依赖关系.温莎确实提供了一些代理选项,例如:

configurer.Proxy.AdditionalInterfaces(interfaces);
configurer.Proxy.MixIns(r => r.Component(type));

但是它似乎没有提供自定义属性的选项.有人知道如何实现吗?非常感谢.

解决方法:

标准ProxyGroup提供对代理生成选项的子集的访问.但是,创建您自己的描述符来修改其他选项并将其添加到组件注册中相对简单.诀窍是使用扩展方法来检索内置ProxyGroup注册帮助器使用的代理选项.

public class ProxyCustomAttributeBuilderDescriptor : IComponentModelDescriptor
{
    public void BuildComponentModel(IKernel kernel, ComponentModel model)
    {
        var options = model.ObtainProxyOptions();    
        // ... do whatever you need to customise the proxy generation options
    }

    public void ConfigureComponentModel(IKernel kernel, ComponentModel model)
    {
    }
}

然后,当您注册组件时,只需添加以下描述符:

configurer.AddDescriptor(new ProxyCustomAttributeBuilderDescriptor());

标签:castle-windsor,castle-dynamicproxy,c
来源: https://codeday.me/bug/20191120/2045603.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有