【问题标题】:Nancy create singleton with constructor parametersNancy 使用构造函数参数创建单例
【发布时间】:2016-01-08 01:35:09
【问题描述】:

我正在使用 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

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


编辑

代码在这里运行:

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

        // here 
    }
}

【问题讨论】:

    标签: c# singleton nancy tinyioc


    【解决方案1】:

    你正在做的事情是告诉 TinyIOC“每次你想要其中一个时,请致电我的代表”,所以如果你想使用该方法,你必须自己处理单例方面。

    除非您特别需要延迟创建,否则这样做会更容易:

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

    然后,只要您需要 IFoo,它将始终使用该实例。

    【讨论】:

    • 但它会在应用关闭时处理不是由 IoC 创建的类型吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多