正在解析对NancyFX中使用的服务的构造函数依赖关系



我有以下引导

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或TinyoC,所以我可能做了一些根本错误的事情,尽管我应该提到documentSession确实在Nancy模块中解决了问题。。

有人能提供一个解决方案或一些建议吗?

BlogService应该在什么时候实例化-我的猜测是,对于应用程序只有一次,在这种情况下,我认为您使用错误的引导程序方法注册了会话,应该在ConfigureApplicationContainer中进行。

我一直在玩&深入研究NancyFx和TinyIoC代码库,并找到了解决此问题的方法。。。我不喜欢这种修复。。。但干草有效:)

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新