2012-02-11 4 views
2

今日は面白い問題に遭遇しました。キャッスル3.0のIContributeComponentModelConstructionですべてのプロパティインジェクションを削除するにはどうすればよいですか?

以前は、城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 2.5.1ではPropertySetCollectionがコレクションであり、喜んで変更を受け入れることができたためです。 :-)(実際には、これが "元来の"上流のCastle 2.5.1か個人的に修正されたバージョンだったのかどうかは確かですが...)

PropertySetCollectionはIEnumerableそれは変更することはできません。今、ComponentModelには* Add * Property()メソッドがありますが、* Remove * Property()メソッドはありません。 :-)

何か助けていただければ幸いです。私たちはCastle Windsorをプロジェクトの "ソース"形式に埋め込むことから、必要に応じて小さな変更を加えることができたことを意味しています。プレーンDLLを代わりに使用します(ILMをフレームワークに組み込む)。これは、キャッスルコードの個人的なパッチ適用を意味するすべての「解決策」が単に操作ではないことを意味します。

TIA。

敬具、

答えて

関連する問題