如何在Castle 3.0中删除IContributeComponentModelConstruction中的所有属性注

本文关键字:属性 IContributeComponentModelConstruction 删除 Castle | 更新日期: 2023-09-27 18:24:26

我今天遇到了一个有趣的问题。

以前,在Castle 2.5.1中,我们可以做这样的事情:

internal class PropertyInjectionContributor : IContributeComponentModelConstruction
{
    public void ProcessModel(IKernel kernel, ComponentModel model)
    {
        model.Properties
            .RemoveAll(ps => !ps.Property.HasCustomAttribute<InjectAttribute>() &&
                             !ps.Property.HasCustomAttribute<InjectOptionallyAttribute>());

(InjectAttribute和InjectOptionallyAttribute是我们自己的应用程序框架中的属性,该框架基于Castle Windsor。)

我们之所以要删除,是因为我们希望对注入或不注入什么(公共)属性有更多的控制权。

这是可能的,因为在Castle 2.5.1中,PropertySetCollection是一个Collection,它很乐意接受修改。:-)(实际上,我很确定这是"原始"的上游城堡2.5.1还是我个人修改的版本,但无论如何…)

对于Castle 3.0,PropertySetCollection只是一个IEnumerable,这意味着它不能被修改。现在,ComponentModel有一个*Add*Property()方法,但没有*Remove*Property(

感谢您的帮助。我们正在从在项目中以"源"格式嵌入Castle Windsor(这意味着我们可以根据需要进行小的修改…)转向使用普通DLL(并将它们合并到我们的框架中)。这意味着,所有暗示对Castle代码进行个人修补的"解决方案"都只是一个否定。

TIA。

谨致问候,根据

如何在Castle 3.0中删除IContributeComponentModelConstruction中的所有属性注

我在http://docs.castleproject.org/Windsor.Whats-New-In-Windsor-3.ashx,位于"属性依赖项筛选"类别下。这可能会奏效,只是还没有时间测试。