Ninject:在每个Get调用中调用一个方法

时间:2019-04-15 22:19:44

标签: c# .net dependency-injection ninject

我在Ninject上有一个 Singleton绑定,我想在DI解析它时(即每次Get调用时)调用一个方法。 Ninject具有OnActivation方法,该方法仅在解析对象时调用。

我知道使用Transient范围将是一种直观的解决方案,但是由于失控的原因。该对象必须为单例。

1 个答案:

答案 0 :(得分:1)

您可以通过一些技巧来实现。 让我举个例子:

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,但是这次使用了名称条件。这将解析为命名的单例绑定。