Вы можете использовать атрибут Castle.Core.DoNotWireAttribute , чтобы предотвратить подключение свойства к контейнеру IoC (это в сборке Castle.Core, что означает, что вашей библиотеке нужно только взять зависимость от облегченной сборки Castle.Core - если, например, вы хотите использовать код без инверсии контейнера управления вообще или в другом контейнере IoC).
Я не верю, что есть какой-либо способ предотвратить возникновение проводки в конфигурации Xml, но было бы достаточно легко добавить поддержку для этого - если бы мне пришлось это сделать, я бы, вероятно,:
- Введите какой-то атрибут в объявлении свойства в xml:
- Наследовать от PropertiesDependenciesModelInspector , переопределяя метод InspectProperties , чтобы применять некоторую дополнительную логику для определения того, какие свойства должны быть добавлены в качестве зависимостей к модели компонентов (проверка модели. Конфигурация для проводника = "ложная" пара атрибут / значение).
- Унаследовать от DefaultComponentModelBuilder и переопределить InitializeContributors , чтобы включить замену PropertiesDependenciesModelInspector - или просто удалить существующий вкладчик свойств и добавить свой собственный во время выполнения через AddContributor / RemoveContributor методов.
- Замените ComponentModelBuilder экземпляр службы, назначенный для ядра вашего контейнера.
Другой подход, который может работать для вас, состоит в том, чтобы просто вручную удалить зависимости из модели, прежде чем запрашивать какие-либо экземпляры службы, т. Е.
kernel.GetHandler(typeof(MyComponent)).ComponentModel.Dependencies.RemoveAll(d => d.DependencyKey == "PropertyThatShouldNotBeWired");
YMMV с таким подходом - особенно если у вас есть запускаемые службы или другие средства, которые могут с нетерпением создавать экземпляр вашего компонента после его регистрации.