我的解决方案的核心项目中有一个接口:IPersonManager,它有两个具体的实现,属于各自的项目。
在我的 Web 项目中,有一个 MVC 区域代表这两个项目,并且每个区域都有一个框架安装程序类,它将人员管理器类注册到每个区域的接口,如下所示:
container.Register(AllTypes
.FromAssemblyNamed("MySolution.MyProject")
.Where(t => t.Name.EndsWith("Manager"))
.WithService.DefaultInterface()
.Configure(x => x.LifeStyle.PerWebRequest)
);
注册后,当我在 IPersonManager 接口的内核上获取处理程序时,我得到以下信息:
{Castle.MicroKernel.IHandler[2]}
[0]: Model: {MySolution.Core.Interfaces.Services.IPersonManager}
/ {MySolution.Area1.PersonManager}
[1]: Model: {MySolution.Core.Interfaces.Services.IPersonManager}
/ {MySolution.Area2.PersonManager}
所以我可以看到两个实现都已注册。
问题是当我在网站上的Area2 时,windsor 正在解析Area1 的接口实现而不是Area2。
好像温莎只是把最先注册的那个还给我。有没有办法根据 MVC 区域取回正确的实现?