我在Ninject上有一个Singleton绑定,并且我想在DI解析它时(即每次Get调用时)调用一个方法。 Ninject具有仅在解析对象时调用的OnActivation方法。
我知道使用Transient范围将是一种直观的解决方案,但是由于无法控制的原因。该对象必须是单例。
最佳答案
您可以通过一些技巧来实现。
让我给你举个例子:
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
,但这一次使用名称条件。这将解析为命名的单例绑定。关于c# - Ninject:在每个Get调用中调用一个方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55697974/