Nancy使用构造函数参数创建singleton

本文关键字:创建 singleton 参数 构造函数 Nancy | 更新日期: 2023-09-27 18:29:19

我使用Nancy和TinyIoC来解决依赖关系。

一个依赖项特别需要是应用程序生命周期单例。

如果我用一个默认的构造函数来做,它就可以工作:

container.Register<IFoo, Foo>().AsSingleton();   // WORKS

但如果我试着用一些关于构造器的论点,它就不是:

container.Register<IFoo>((c, e) => new Foo("value", c.Resolve<ILogger>())).AsSingleton();
// FAILS with error "Cannot convert current registration of Nancy.TinyIoc.TinyIoCContainer+DelegateFactory to singleton"

.AsSingleton()之后,它再次工作,但我没有得到一个单例:

container.Register<IFoo>((c, e) => new Foo("value", c.Resolve<ILogger>()));
// Works, but Foo is not singleton

有什么想法吗?我认为这个错误应该很明显,但我找不到。我已经用完了所有的谷歌foo。


编辑

代码在这里运行:

public class Bootstrapper : DefaultNancyBootstrapper
{
    protected override void ConfigureApplicationContainer(TinyIoCContainer container)
    {
        base.ConfigureApplicationContainer(container);
        // here 
    }
}

Nancy使用构造函数参数创建singleton

您在那里所做的是告诉TinyOC"每次您想要其中一个,请调用我的委托",所以如果您想使用该方法,您必须自己处理singleton方面。

除非你特别需要延迟创建,否则做起来更容易:

container.Register<IFoo>(new Foo("value", c.Resolve<ILogger>()));

然后,每当您想要IFoo时,它将始终使用该实例。