Как удалить все инъекции свойств в IContributeComponentModelConstruction в Castle 3.0? - PullRequest
2 голосов
/ 12 февраля 2012

Сегодня я столкнулся с интересной проблемой.

Ранее, с помощью 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 была коллекцией, которая с радостью принимала бы изменения.:-) (на самом деле, я уверен, что это был "нетронутый" вышестоящий Castle 2.5.1 или моя лично измененная версия, но тем не менее ...)

С Castle 3.0 PropertySetCollection является просто IEnumerableчто означает, что это не может быть изменено.Теперь у ComponentModel есть метод * Add * Property (), но нет метода * Remove * Property (), так как же мне это сделать сейчас ???: -)

Любая помощь приветствуется.Мы отказываемся от внедрения Castle Windsor в формате «исходный код» в нашем проекте (что означало, что мы можем вносить небольшие изменения по мере необходимости ...), вместо этого вместо использования простых DLL (и ILMerging их в нашу инфраструктуру).Это означает, что все «решения», которые подразумевают персональное исправление кода Замка, просто запрещены.

TIA.

С уважением, за

1 Ответ

1 голос
/ 15 февраля 2012

Я нашел ответ на http://docs.castleproject.org/Windsor.Whats-New-In-Windsor-3.ashx, в категории «Фильтрация зависимостей свойств». Это, вероятно, сработает, просто еще не успел его протестировать.

...