Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 注册不同的实现_C#_.net_Castle Windsor - Fatal编程技术网

C# 注册不同的实现

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

在业务层,我有3个服务接口
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的旧代码上尝试了一下,效果很好。