inversion-of-control - 通过参数名称解​​决 CasSTLe Windsor 依赖关系

标签 inversion-of-control castle-windsor ioc-container dependency-inversion

鉴于此

Component.For<IService>().ImplementedBy<SecretService>().Named("secretService")
Component.For<IService>().ImplementedBy<PublicService>().Named("publicService")

还有

class Foo{
    public Foo(IService publicService){ ...... }
}

还有

class Bar{
    public Bar(IService secretService){ ...... }
}

那么我怎样才能实现以下目标

Foo 和 Bar 应该分别获取 publicService 和 SecretService 的实例,完全基于其构造函数参数的名称。

最佳答案

我现在已经使用自定义的 SubDependencyResolver 使其工作,我将其添加到容器中,现在它按名称注入(inject)实现

public class ByParameterNameResolver : ISubDependencyResolver
{
    private readonly IKernel kernel;

    public ByParameterNameResolver(IKernel kernel)
    {
        this.kernel = kernel;
    }

    public virtual bool CanResolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model, DependencyModel dependency)
    {
        if (dependency.TargetItemType == null)
            return false;

        if (string.IsNullOrWhiteSpace(dependency.DependencyKey))
            return false;

        return kernel.HasComponent(dependency.DependencyKey);
    }

    public virtual object Resolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model, DependencyModel dependency)
    {
        return kernel.Resolve(dependency.DependencyKey, dependency.TargetItemType);
    }
}

关于inversion-of-control - 通过参数名称解​​决 CasSTLe Windsor 依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48542326/

相关文章:

c# - 基于运行时输入的依赖注入(inject)

asp.net-mvc - 用IoC在Controller中注入(inject)HttpContextBase的目的是什么

c# - CaSTLe Windsor Ms Adapter Core 2.0 实现

asp.net - IIS7 & CaSTLe.MicroKernel.Lifestyle.PerWebRequestLifestyleModule 注册问题

c# - CaSTLe Windsor 3.1 缺少方法异常

php - Laravel 5 目标不可实例化

javascript - 从 Backbone collection add 更新项目 View

dependency-injection - Autofac OwnedInstances 和 ASP.NET Web API 的 InstancePerApiRequest 支持

c# - 在 Simple Injector 中注册时设置收集项目的 Lifestyle

c# - 如何在 Windows 窗体的构造函数中注入(inject)依赖项