жаль, если это было предложено, прежде чем я пытался делать некоторые Google-джеинга и не нашли никаких совпадений, так что здесь идет ....Предотвращение повторяющихся регистраций - Виндзорский замок
У меня есть контейнер замок Виндзор, что Я добавлю свои компоненты, используя следующий метод (где контейнер является экземпляром IWindsorContainer
) ...
container.Register(AllTypes.FromAssemblyNamed("App.Infrastructure")
.Where(x => !x.IsAbstract && !x.IsInterface)
.WithService.DefaultInterface()
Это прекрасно работает, но я тогда хочу зарегистрировать другой DLL в том же образом разрешить зависимости от этого. ..
Теперь все равно я могу заставить Windsor уведомить меня, если добавляется одно и то же разрешение интерфейса, т. Е. Есть только один исполнитель на интерфейс (возьмите первый, если более одного существует).
Надеюсь, я достаточно хорошо объяснил. Я использую версию Castle Windsor: 2.5.1.0 и обновление/изменение версии на самом деле не являются опциями.
Update:
Я решить это путем удаления дубликатов регистрации после того, как они были зарегистрированы. После завершения регистрации, то у меня есть ниже петля ...
var registeredServices = new Dictionary<Type, string>();
foreach (var node in container.Kernel.GraphNodes)
{
var cmp = ((Castle.Core.ComponentModel)node);
Type t = cmp.Service;
if (registeredServices.ContainsKey(t))
container.Kernel.RemoveComponent(cmp.Name);
else
registeredServices.Add(t, cmp.Implementation.FullName);
}
Это должно быть поведение по умолчанию, когда первая регистрация разрешена. – maxlego
Привет @maxlego. Я не понимаю, что вы имеете в виду, не могли бы вы рассказать о том, что вы имеете в виду. –
, если вы зарегистрируете несколько компонентов с одним и тем же интерфейсом. то при разрешении этого интерфейса вы получите первый зарегистрированный компонент. Как я понимаю, это то, что вы хотите. Или это не так? – maxlego