3

我正在尝试使用 RavenDB 添加引导程序 NancyFX,并且在尝试运行应用程序时遇到以下错误...

“无法解析类型:Nancy.IResponseFormatter”

环境:

ASP.NET

南希

Nancy.Hosting.Aspnet

乌鸦数据库

VS2010 开发服务器

代替粘贴所有代码,这里是我用作示例的站点的链接。例如,我的意思是我逐字复制它,看看我是否可以让它工作。 http://stuff-for-geeks.com/category/NancyFx.aspx

我之前实际上已经在演示中看到过这段代码,但由于某种原因,我根本无法让它运行。它在启动时失败。就好像 Nancy 没有使用我的 BootStrapper。

更多堆栈跟踪:

[TypeInitializationException:'Nancy.Hosting.Aspnet.NancyHttpRequestHandler' 的类型初始化程序引发异常。] Nancy.Hosting.Aspnet.NancyHttpRequestHandler..ctor() +0

[TargetInvocationException:调用的目标已引发异常。]

任何帮助将非常感激。

4

2 回答 2

3

该代码基于旧版本的 Nancy。您应该考虑改用 IResponseFormatterFactory 。博客文章中定义的自定义模块构建器基于 DefaultNancyModuleBuilder 的旧副本,如果您查看当前版本https://github.com/NancyFx/Nancy/blob/master/src/ Nancy/Routing/DefaultNancyModuleBuilder.cs你应该能够进行必要的调整

于 2012-03-01T00:22:52.747 回答
2

这是RavenAwareModuleBuilder正在讨论的课程的代码:

编辑 1

下面的代码已针对 Nancy 版本 0.12 进行了更新。注意 BuildModule 方法中的新NegotiationContext行。

public class RavenAwareModuleBuilder : INancyModuleBuilder
{
    private readonly IViewFactory viewFactory;
    private readonly IResponseFormatterFactory responseFormatterFactory;
    private readonly IModelBinderLocator modelBinderLocator;
    private readonly IModelValidatorLocator validatorLocator;
    private readonly IRavenSessionProvider ravenSessionProvider;

    public RavenAwareModuleBuilder(IViewFactory viewFactory, IResponseFormatterFactory responseFormatterFactory, IModelBinderLocator modelBinderLocator, IModelValidatorLocator validatorLocator, IRavenSessionProvider ravenSessionProvider)
    {
        this.viewFactory = viewFactory;
        this.responseFormatterFactory = responseFormatterFactory;
        this.modelBinderLocator = modelBinderLocator;
        this.validatorLocator = validatorLocator;
        this.ravenSessionProvider = ravenSessionProvider;
    }


    public NancyModule BuildModule(NancyModule module, NancyContext context)
    {            
        context.NegotiationContext = new NegotiationContext
        {
            ModuleName = module.GetModuleName(),
            ModulePath = module.ModulePath,
        };

        module.Context = context;
        module.Response = this.responseFormatterFactory.Create(context);
        module.ViewFactory = this.viewFactory;
        module.ModelBinderLocator = this.modelBinderLocator;
        module.ValidatorLocator = this.validatorLocator;

        context.Items.Add(
            "IDocumentSession", 
            ravenSessionProvider.GetSession()
        );

        module.After.AddItemToStartOfPipeline(ctx =>
        {
            var session = ctx.Items["IDocumentSession"] as IDocumentSession;
            if (session != null) session.Dispose();
        });

        return module;
    }
}
于 2012-04-17T09:18:39.360 回答