我使用 Castle Winsdor 作为 DI 解析工具。
我映射实体代码:
container.RegisterServices(
Assembly.GetAssembly(typeof(GridEntityService<,>)));
我有两个泛型的接口:
IGridEntityService<TEntity,TService>
我有这个接口的两个实现。第一的:
GridEntityService<TEntity,TService>: IGridEntityService<TEntity,TService>
而且我也有自定义实现。第二:
TaskServiceOne : GridEntityService<User, LoginService> { }
TaskServiceTwo : GridEntityService<Report, LoginService> { }
在我的控制器构造函数中:
public UserController(
IGridEntityService<User, LoginService> userService,
IGridEntityService<Report, LoginService> reportService)
{
// Get Correct one TaskServiceOne
GridEntityService = userService;
// Get GridEntityService<Report, LoginService>
// not the TaskServiceTwo
GridSecondEntityService = reportService
}
我怎样才能让温莎城堡得到正确的答案?为什么他们弄错了?我在其他地方也有类似的服务,而且它们工作得很好。
已编辑。Anwser 发表评论。你说的对。它的扩展方法:
public static void RegisterServices(this IWindsorContainer container, Assembly assembly)
{
container.Register(
AllTypes.FromAssembly(assembly).Where(t => true).WithService.AllInterfaces().Configure(
reg => reg.LifeStyle.Custom<InstantiateAndForgetIt>()));
}