C# 使用同一接口注册同一类型的两个单例实例
我需要在Ninject中使用相同的接口注册两个相同类型的单例实例 为了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
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();