Вы можете использовать именованный синтаксис:
kernel.Bind<IManifest>().To<Manifest>().InSingletonScope().Named("ManifestA");
kernel.Bind<IManifest>().To<Manifest>().InSingletonScope().Named("ManifestB");
Затем получить его, вызвав:
kernel.Get<IWeapon>("ManifestA");
Или указать NamedAttribute в конструкторе.
public class ParentA
{
public ParentA([Named("ManifestA")] IManifest manifest)
{
....
}
}
Затем вытакже может использовать синтаксис WhenInjectedInto.
kernel.Bind<IManifest>().To<Manifest>().WhenInjectedInto<ParentA>().InSingletonScope();
kernel.Bind<IManifest>().To<Manifest>().WhenInjectedInto<ParentB>().InSingletonScope();
Или синтаксис WhenParentNamed, если Parents одного типа:
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();