Nancy使用构造函数参数创建单例

时间:2016-01-07 16:27:02

标签: c# singleton nancy tinyioc

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

1 个答案:

答案 0 :(得分:7)

你在做什么告诉TinyIOC“每次你想要其中一个,给我的代表打电话”,所以如果你想使用这种方法,你必须自己处理单身方面。

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

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

那么只要你想要一个IFoo,它就会一直使用那个实例。