抱歉,如果在我尝试做一些谷歌搜索并且没有找到任何匹配项之前有人问过这个问题,那么这里就……
我有一个 Castle Windsor 容器,我使用以下方法将组件添加到其中(其中容器是 的实例IWindsorContainer
)...
container.Register(AllTypes.FromAssemblyNamed("App.Infrastructure")
.Where(x => !x.IsAbstract && !x.IsInterface)
.WithService.DefaultInterface()
这很好用,但是我想以同样的方式注册另一个 DLL 来解决依赖关系......
container.Register(AllTypes.FromAssemblyNamed("App.Client.Infrastructure")
.Where(x => !x.IsAbstract && !x.IsInterface)
.WithService.DefaultInterface()
现在无论如何我都可以让 Windsor 通知我是否添加了相同的接口分辨率,即:每个接口只有 1 个实现者(如果存在多个接口,则采用第一个实现者)。
希望我已经很好地解释了自己。我正在使用 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);
}