Vb.net Castle Windsor-解析时的默认接口

Vb.net Castle Windsor-解析时的默认接口,vb.net,dependencies,castle-windsor,code-injection,castle,Vb.net,Dependencies,Castle Windsor,Code Injection,Castle,我最近才开始使用Castle Windsor,有个问题 假设我有一个接口——IService——我有五个实现它的类(IServiceOne、IServicewo、IServiceThree)等等 从那里我有了实现每个iSeries设备的类。它们被恰当地命名为ServiceOneProvider、ServiceTwoProvider、ServiceThreeProvider等。在这些类中,我正在解析IService对象 所以我想知道的是——是否有可能使用DefaultInterfaces的等价物(

我最近才开始使用Castle Windsor,有个问题

假设我有一个接口——IService——我有五个实现它的类(IServiceOne、IServicewo、IServiceThree)等等

从那里我有了实现每个iSeries设备的类。它们被恰当地命名为ServiceOneProvider、ServiceTwoProvider、ServiceThreeProvider等。在这些类中,我正在解析IService对象

所以我想知道的是——是否有可能使用DefaultInterfaces的等价物(可以在注册期间使用)解析IService对象,这样ServiceOneProvider将获得ServiceOne对象,ServiceTwoProvider将获得ServiceTwo对象等等

谢谢


-罗斯

我没有看到温莎内置的任何东西可以做这样的事情。我想使用HandlerSelector,但是当选择器运行时,您不知道请求依赖项的类型,因此这没有帮助

你可以用这个。只需创建一个接口以返回iSeries对象(C版本):

然后将您的iSeries实例命名为“ServiceOne”、“ServiceTwo”等

public interface IProviderFactory
{
    IService GetServiceOne();
    IService GetServiceTwo();
    IService GetServiceThree();
}
Component.For<IService>().ImplementedBy<ServiceOne>().Named("ServiceOne"),
Component.For<IService>().ImplementedBy<ServiceTwo>().Named("ServiceTwo"),
Component.For<IService>().ImplementedBy<ServiceThree>().Named("ServiceThree"),
public class ServiceOneProvider
{
    public ServiceOneProvider(IProviderFactory factory)
    {
        var service = factory.GetServiceOne();
    }
}

public class ServiceTwoProvider
{
    public ServiceTwoProvider(IProviderFactory factory)
    {
        var service = factory.GetServiceTwo();
    }
}

public class ServiceThreeProvider
{
    public ServiceThreeProvider(IProviderFactory factory)
    {
        var service = factory.GetServiceThree();
    }
}