Вы можете достичь этого с помощью некоторых хитростей.
Позвольте привести пример:
const string Name = "Foo";
// Singleton Binding. Will only be used when the context uses the {Name}
Bind<Foo>().To<Foo>()
.Named(Name)
.InSingletonScope();
// Unnamed binding with method call on each resolution
Bind<Foo>().ToMethod(ctx =>
{
// Do anything arbitrary here. like calling a method...
return ctx.Kernel.Get<Foo>(Name));
});
Когда ядро запрашивает Foo
(без имени), оно преобразуется в привязку ToMethod
, куда вы можете вставить любой произвольный код, который вам нравится. В конце метод должен использовать ядро для запроса Foo
, но на этот раз с условием имени. Это разрешит указанную привязку синглтона.