C# 如何拦截温莎城堡';覆盖依赖项的组件解析?

C# 如何拦截温莎城堡';覆盖依赖项的组件解析?,c#,dependency-injection,inversion-of-control,castle-windsor,C#,Dependency Injection,Inversion Of Control,Castle Windsor,我正在寻找一种方法,将其与温莎城堡的解决过程挂钩,这样我就可以做如下事情: if (componentCanBeResolvedElsewhere) { return elsewhere.Resolve<TService>(); } else { windsorContainer.Resolve<TService>(); } if(组件可在此处求解) { 返回别处; } 其他的 { windsorContainer.Resolve(); } 我希望Ca

我正在寻找一种方法,将其与温莎城堡的解决过程挂钩,这样我就可以做如下事情:

if (componentCanBeResolvedElsewhere)
{
    return elsewhere.Resolve<TService>();
}
else
{
    windsorContainer.Resolve<TService>();
}
if(组件可在此处求解)
{
返回别处;
}
其他的
{
windsorContainer.Resolve();
}
我希望Castle Windsor处理我的大部分依赖关系,但我希望提供一种“填补空白”的能力


我相信这是可以做到的,但我正在努力寻找示例。

看起来您是通过一个解决方案来实现的。

您可以使用它来声明您有一种解决组件的特殊方法。下面是一个用于解析应用程序设置中的字符串的示例

public class AppSettingsResolver : ISubDependencyResolver
{
    public bool CanResolve(
                CreationContext context,
                ISubDependencyResolver contextHandlerResolver,
                ComponentModel model,
                DependencyModel dependency)
    {
        return !string.IsNullOrEmpty(ConfigurationManager.AppSettings[dependency.DependencyKey])
               &&
               TypeDescriptor.GetConverter(dependency.TargetType)
                .CanConvertFrom(typeof(string));
    }

    public object Resolve(
                    CreationContext context,
                    ISubDependencyResolver contextHandlerResolver,
                    ComponentModel model,
                    DependencyModel dependency)
    {
        return TypeDescriptor
            .GetConverter(dependency.TargetType)
            .ConvertFrom(ConfigurationManager.AppSettings[dependency.DependencyKey]);
    }
}
然后在castle容器中注册解析器:

container.Kernel.Resolver.AddSubResolver(new AppSettingsResolver())

没问题:我正在尝试研究两者之间存在什么区别:目前正在阅读以下内容:@samy发布的链接现在可以在这里找到: