C# 使用同一接口注册同一类型的两个单例实例

C# 使用同一接口注册同一类型的两个单例实例,c#,.net,dependency-injection,ninject,C#,.net,Dependency Injection,Ninject,我需要在Ninject中使用相同的接口注册两个相同类型的单例实例 为了 kernel.Bind().To().InSingletonScope();//一审 kernel.Bind().To().InSingletonScope();//第二个 我怎样才能做到这一点?我希望应该有一些方法可以使用某些属性或其他东西来区分它们。您可以使用命名语法: kernel.Bind<IManifest>().To<Manifest>().InSingletonScope().Name

我需要在Ninject中使用相同的接口注册两个相同类型的单例实例

为了

kernel.Bind().To().InSingletonScope();//一审
kernel.Bind().To().InSingletonScope();//第二个

我怎样才能做到这一点?我希望应该有一些方法可以使用某些属性或其他东西来区分它们。

您可以使用命名语法:

kernel.Bind<IManifest>().To<Manifest>().InSingletonScope().Named("ManifestA");
kernel.Bind<IManifest>().To<Manifest>().InSingletonScope().Named("ManifestB");
然后还可以使用WhenInjectedTo语法

kernel.Bind<IManifest>().To<Manifest>().WhenInjectedInto<ParentA>().InSingletonScope();
kernel.Bind<IManifest>().To<Manifest>().WhenInjectedInto<ParentB>().InSingletonScope();
kernel.Bind();
kernel.Bind().To().WhenInjectedInto().InSingletonScope()时;
或者,如果父项的类型相同,则为WhenParentNamed语法:

kernel.Bind<Parent>().ToSelf().Named("ParentA");
kernel.Bind<Parent>().ToSelf().Named("ParentB");

kernel.Bind<IManifest>().To<Manifest>().WhenParentNamed("ParentA").InSingletonScope();
kernel.Bind<IManifest>().To<Manifest>().WhenParentNamed("ParentB").InSingletonScope();
kernel.Bind().ToSelf().Named(“ParentA”);
kernel.Bind().ToSelf().Named(“ParentB”);
kernel.Bind();
kernel.Bind();

您想要实现什么目标?您能否展示并解释为什么需要两个
清单
实例?你打算如何使用它们?我需要两个相同类型的独立实例来保存不同的应用程序特定数据。我认为,命名绑定应该可以解决我的问题。我会尝试一下。。
public class ParentA
{
    public ParentA([Named("ManifestA")] IManifest manifest)
    {
        ....
    }
}
kernel.Bind<IManifest>().To<Manifest>().WhenInjectedInto<ParentA>().InSingletonScope();
kernel.Bind<IManifest>().To<Manifest>().WhenInjectedInto<ParentB>().InSingletonScope();
kernel.Bind<Parent>().ToSelf().Named("ParentA");
kernel.Bind<Parent>().ToSelf().Named("ParentB");

kernel.Bind<IManifest>().To<Manifest>().WhenParentNamed("ParentA").InSingletonScope();
kernel.Bind<IManifest>().To<Manifest>().WhenParentNamed("ParentB").InSingletonScope();