如何在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。
谨致问候,根据
我在http://docs.castleproject.org/Windsor.Whats-New-In-Windsor-3.ashx,位于"属性依赖项筛选"类别下。这可能会奏效,只是还没有时间测试。