Сегодня я столкнулся с интересной проблемой.
Ранее, с помощью 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.
С уважением, за