1

我有以下引导程序

public class NancyBootStrapper: DefaultNancyBootstrapper
{
    protected override void ConfigureRequestContainer(TinyIoC.TinyIoCContainer container, NancyContext context)
    {
        base.ConfigureRequestContainer(container, context);

        var ravenSession = container.Resolve< IRavenSessionProvider >().GetSession();
        container.Register( ravenSession );
    }
}

当我的 Nancy 应用程序尝试使用以下构造函数实例化 BlogService 时

    public BlogService(IDocumentSession documentSession)
    {
        this.documentSession = documentSession;
    }

应用程序爆炸说它无法解析文档会话,我还在我的测试方法中尝试了以下操作(删除构造函数注入)。

    public void BuildCategories()
    {
        var container = TinyIoCContainer.Current;
        documentSession = container.Resolve< IDocumentSession >();
        documentSession.Store(new Category{Title = "test"});
        documentSession.Store(new Category{Title = ".net"});

        documentSession.SaveChanges();
    }

这也炸了,指出它无法解析documentSession。

现在这是我第一次使用 NancyFX 或 TinyIoC,所以我可能会做一些根本错误的事情,尽管我应该提到 documentSession 确实在 Nancy 模块中解析..

任何人都可以提供修复或一些建议吗?

4

2 回答 2

3

什么时候BlogService应该实例化?-我的猜测是应用程序一次,在这种情况下,我相信您在错误的引导程序方法中注册会话,并且应该在ConfigureApplicationContainer.

于 2012-09-04T18:41:39.340 回答
2

我一直在玩和挖掘 NancyFx 和 TinyIoC 代码库,并想出了如何解决这个问题......我不喜欢这个修复......但是干草它有效 :)

基本上,我在引导程序方法 configureRequestContainer 中创建了一个 RavenDB 文档会话,因为将请求用作工作范围单元是最佳实践。

不幸的是,在 configureApplicationContainer 中由 tinyIoC 自动连接的任何东西都没有使用 Nancy 请求使用的子容器执行任何构造函数注入(这包括标记为 MultiInstance 或 PerRequestSingleton 的那些。

为了解决这个问题,您需要在同一个子容器中重新注册依赖于您的每个请求组件的任何组件。

正如我所说,我不喜欢这个修复,但它最终是一个修复:)

于 2012-09-04T21:12:38.627 回答