抱歉如果这个问题以前已经被问过,我试着做了一些谷歌搜索但没有找到任何匹配的结果,所以现在来问一下....
我有一个Castle Windsor容器,我使用以下方法将我的组件添加到其中(其中container是IWindsorContainer
的实例)...
container.Register(AllTypes.FromAssemblyNamed("App.Infrastructure")
.Where(x => !x.IsAbstract && !x.IsInterface)
.WithService.DefaultInterface()
这很有用,但我想以同样的方式注册另一个DLL来解决那个DLL的依赖关系问题...
container.Register(AllTypes.FromAssemblyNamed("App.Client.Infrastructure")
.Where(x => !x.IsAbstract && !x.IsInterface)
.WithService.DefaultInterface()
现在有没有办法让Windsor通知我是否正在添加相同的接口分辨率,即:每个接口只有一个实现者(如果存在多个,则取第一个)。
希望我已经解释清楚了。我正在使用Castle Windsor版本:2.5.1.0,升级/更改版本并不是一个真正的选项。
更新:
我通过在注册后删除重复的注册来解决了这个问题。 注册完成后,我有一个循环...
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);
}