编程语言
首页 > 编程语言> > c#-Caslte Windsor代理生成选项

c#-Caslte Windsor代理生成选项

作者:互联网

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

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

我已经能够使用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