我有以下引导
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的容器)。
为了解决这个问题,您需要在同一个子容器中重新注册依赖于每个请求组件的任何组件。
正如我所说,我不喜欢这个修复,但它最终是一个修复:)