2012-03-01 94 views
3

我想補充引導NancyFX與RavenDB和我遇到了以下錯誤試圖運行應用程序...自舉NancyFX與RavenDB

「無法解析類型:Nancy.IResponseFormatter」

環境:

ASP.Net

南希

Nancy.Host ing.Aspnet

RavenDB

VS2010 DevelopmentServer

代替粘貼的所有代碼的,這裏是我作爲例子的網站的鏈接。舉例來說,我的意思是我逐字複製了它,看看我是否能夠實現它的功能。 http://stuff-for-geeks.com/category/NancyFx.aspx

我已經看到過這段代碼在演示之前運行過,但由於某種原因,我無法運行它。它在啓動時失敗。這幾乎就像南希不使用我的BootStrapper。

更多的堆棧跟蹤:

[TypeInitializationException:關於 'Nancy.Hosting.Aspnet.NancyHttpRequestHandler' 的類型初始引發異常] Nancy.Hosting.Aspnet.NancyHttpRequestHandler..ctor()+ 0

[TargetInvocationException:異常已被調用的目標拋出]

任何幫助,將真正理解。

回答

3

該代碼基於舊版本的Nancy。你應該看看使用IResponseFormatterFactory來代替。在博客文章中定義的自定義模塊構建器基於DefaultNancyModuleBuilder的舊副本,如果您查看當前版本https://github.com/NancyFx/Nancy/blob/master/src/Nancy/Routing/DefaultNancyModuleBuilder.cs,則應該可以進行必要的調整

+0

謝謝,就是這樣。我有點不好意思,因爲我沒有注意到這一點。感謝您的幫助,並再次感謝。 – TheWeekendDeveloper 2012-03-01 15:55:27

2

以下是代碼對於正在討論的RavenAwareModuleBuilder類:

編輯1

下面的代碼已經更新了南希版本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; 
    } 
}