Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ravendb 解析构造函数对NancyFX中使用的服务的依赖关系_Ravendb_Nancy_Tinyioc - Fatal编程技术网

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

Ravendb 解析构造函数对NancyFX中使用的服务的依赖关系,ravendb,nancy,tinyioc,Ravendb,Nancy,Tinyioc,我有以下引导 public class NancyBootStrapper: DefaultNancyBootstrapper { protected override void ConfigureRequestContainer(TinyIoC.TinyIoCContainer container, NancyContext context) { base.ConfigureRequestContainer(container, context);

我有以下引导

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 );
    }
}
应用程序崩溃,声明它无法解析文档会话,我在测试方法中也尝试了以下方法(删除构造函数注入)

public void BuildCategories()
{
var container=TinyIoCContainer.Current;
documentSession=container.Resolve();
documentSession.Store(新类别{Title=“test”});
documentSession.Store(新类别{Title=“.net”});
documentSession.SaveChanges();
}
这也引起了轰动,指出它无法解决documentSession

现在这是我第一次使用NancyFX或TinyIoC,因此我可能犯了一些根本性的错误,尽管我应该提到documentSession确实在Nancy模块中解决了问题


有谁能提供修复或一些建议吗?

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

中执行该操作
BlogService
应该在何时实例化-我的猜测是应用程序的一次,在这种情况下,我相信您使用了错误的引导程序方法注册会话,应该在
ConfigureApplicationContainer

中进行注册。我一直在玩并深入研究NancyFx和TinyIoC代码库,并且已经找到了解决此问题的方法。。。我不喜欢修理。。。但它起作用了:)

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

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

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


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

我一直在玩游戏&深入研究NancyFx和TinyIoC代码库,并找到了解决这个问题的方法。。。我不喜欢修理。。。但它起作用了:)

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

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

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


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

是的。。。会话遵循工作单元模式,每个请求需要一个会话,因此me在ConfigureRequestContainer中注册。但这并不能解释为什么我可以在运行时在buildCategries方法中解析会话。。我原以为TonyIoC的当前版本会公开应用程序范围内的请求配置:(是的……会话遵循工作单元模式,每个请求需要一个会话,因此我在ConfigureRequestContainer中注册。但这并不能解释为什么我可以在运行时在BuildCategries方法中解析会话。我原以为TonyIoC的当前版本会使用应用程序范围的东西:(每个请求都会创建、设置和销毁请求容器,因此,是的,它们仅在该请求中设计可用。如果您想在nancy请求之外使用会话,那么您必须(a)使用另一个会话,或者(b)将自己绑定到ASP.Net宿主和HttpContext并将其放入其中(啊!)…就个人而言,我会选择(a),但它们是我能想到的唯一选项。每个请求都会创建、设置和销毁请求容器,因此,是的,它们仅在该请求中设计可用。如果您想在nancy请求之外使用会话,则必须(a)使用另一个会话或(b)将自己绑定到ASP.Net主机和HttpContext,并将其放在那里(啊!)。我个人会选择(a),但它们是我能想到的唯一选项。
    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();
    }