Ninject 级联命名解析?

Ninject cascading named resolution?

我有两个支持相同界面的对象。每个对象都有自己的配置对象,该对象作为构造函数参数传递。我希望 Ninject 使用对象的名称来解析其配置参数的名称。目前,如果我执行 kernel.Get("one") 它无法解析 ThingConfig,即使恰好有一个以该名称注册的。 (编辑:固定示例以包含 ThingConfig 绑定):

class MyService
{
    public MyService([Named("one")] IThing one, [Named("two")] IThing two) {}
}

class ThingConfig {}

class Thing(ThingConfig cfg) : IThing {}

And in my binder:
Bind<IThing>().To(typeof(Thing)).InSingletonScope().Named("one");
Bind<IThing>().To(typeof(Thing)).InSingletonScope().Named("two");
Bind<ThingConfig>().ToMethod(() => new ThingConfig()).InSingletonScope().Named("one");
Bind<ThingConfig>().ToMethod(() => new ThingConfig()).InSingletonScope().Named("two");

我想我找到了一个可接受的解决方案,涉及 Named 和 WhenAnyAnyAncestorNamed。

我基本上想要一个 "tag" 来标识范围,所以名称符合要求。我希望能够通过名称解析对象,或者在注入到由该名称激活的对象中时。为此,我必须两次绑定对象 - 一次按名称,一次针对具有该名称的任何祖先:

Bind(interfaces.ToArray()).To(objectType).InSingletonScope().Named(name);
Bind(interfaces.ToArray()).ToMethod(
     ctx => ctx.Kernel.Get(ctx.Request.Service, name)).WhenAnyAncestorNamed(name);

如果有人知道更优雅的解决方案,我会洗耳恭听。