我有以下引导程序
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模块中解决了。
任何人都可以提供修复或一些建议吗?
答案 0 :(得分:3)
BlogService
什么时候应该被实例化? - 我猜应该是应用程序的一次,在这种情况下我相信你在错误的bootstrapper方法中注册会话,并且应该在ConfigureApplicationContainer
中进行。
答案 1 :(得分:2)
我一直在玩&amp;深入研究NancyFx和TinyIoC代码库,并找出了解决这个问题的方法......我不喜欢修复...但干草有效:)
基本上,我在bootstrapper方法configureRequestContainer中创建RavenDB文档会话,因为最佳做法是将请求用作工作单元范围。
不幸的是,在configureApplicationContainer中由tinyIoC自动连接的任何内容都没有使用Nancy请求使用的子容器执行任何构造函数注入(这包括标记为MultiInstance或PerRequestSingleton的那些。
要解决此问题,您需要在同一子容器中重新注册依赖于每个请求组件的任何组件。
正如我所说,我不喜欢修复,但它最终是一个修复:)