C# 注册不同的实现
在业务层,我有3个服务接口C# 注册不同的实现,c#,.net,castle-windsor,C#,.net,Castle Windsor,在业务层,我有3个服务接口 IUserServiceIRoleService和IGroupService 和一个验证接口IValidator IValidator有3种实现—UserValidator,RoleValidator,GroupValidator IUserService is implemented by UserService(IValidator userValidator) IRoleService is implemented by RoleService(IValidat
IUserService
IRoleService
和IGroupService
和一个验证接口IValidator
IValidator有3种实现—UserValidator
,RoleValidator
,GroupValidator
IUserService is implemented by UserService(IValidator userValidator)
IRoleService is implemented by RoleService(IValidator userValidator)
IGroupServiceis implemented by GroupService(IValidator userValidator)
所有这三个服务都使用IValidator作为构造函数参数
在web层,我有3个控制器UserController
接受IUserService
作为构造函数参数,RoleController
接受IRoleService
作为构造函数参数,
组控制器将IGroupServiceas
构造函数参数
我的问题:
如何强制roleService获取RoleValidator
对象和GroupService
获取GroupValidator
对象
我使用的是温莎城堡3.1
windsorContainer.Register(Component.For<IValidator>()
.ImplementedBy<UserValidator>()
.Named("userValidator")
.LifestyleTransient());
windsorContainer.Register(Component.For<IValidator>()
.ImplementedBy<RoleValidator>()
.Named("roleValidator")
.LifestyleTransient());
windsorContainer.Register(Component.For<IValidator>()
.ImplementedBy<GroupValidator>()
.Named("groupValidator")
.LifestyleTransient());
windsorContainer.Register(Component.For())
.由()实施
.Named(“userValidator”)
.生活方式(暂时的);
windsorContainer.Register(Component.For())
.由()实施
.命名(“roleValidator”)
.生活方式(暂时的);
windsorContainer.Register(Component.For())
.由()实施
.Named(“groupValidator”)
.生活方式(暂时的);
我在注册userValidator时使用了
IsFallback()
,但所有3个服务都获得了roleValidator对象。Windsor允许您使用它
更新
给定以下设置:
public interface IMyService
{
}
public class Concrete1 : IMyService
{
}
public class Concrete2 : IMyService
{
}
public class ClassA
{
private IMyService service;
public ClassA(IMyService service)
{
this.service = service;
}
}
public class ClassB
{
private IMyService service;
public ClassB(IMyService service)
{
this.service = service;
}
}
下面是如何使用DependsOn
来选择ClassA
和ClassB
构造函数的“service”参数所使用的IMyService
实现:
var container = new WindsorContainer();
container.Register(
Component.For<IMyService>().ImplementedBy<Concrete1>().Named("C1"),
Component.For<IMyService>().ImplementedBy<Concrete2>().Named("C2"),
Component.For<ClassA>().DependsOn(Dependency.OnComponent("service", "C1")),
Component.For<ClassB>().DependsOn(Dependency.OnComponent("service", "C2"))
);
var容器=新的WindsorContainer();
集装箱。登记(
Component.For().ImplementedBy().Named(“C1”),
Component.For().ImplementedBy().Named(“C2”),
Component.For().DependsOn(Dependency.OnComponent(“服务”,“C1”)),
Component.For().DependsOn(Dependency.OnComponent(“服务”、“C2”))
);
在Windsor 3.1中,服务覆盖不是一个选项,你为什么这么说?服务覆盖是在3.0中添加的。当我键入“Component.For()”时,我没有得到serviceoverride选项。请尝试使用“DependsOn”选项(看起来ServiceOverrides已替换为DependsOn功能)。能否更具体地说明“不起作用”?我只是在一些使用ServiceOverride的旧代码上尝试了一下,效果很好。