Начальная загрузка NancyFX с RavenDB - PullRequest
3 голосов
/ 01 марта 2012

Я пытаюсь добавить загрузчик NancyFX с RavenDB, и у меня возникает следующая ошибка при попытке запустить приложение ...

"Невозможно разрешить тип: Nancy.IResponseFormatter"

Среда:

ASP.Net

Nancy

Nancy.Hosting.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: Исключение было сгенерировано целью вызова.]

Любая помощьбыл бы очень признателен.

Ответы [ 2 ]

3 голосов
/ 01 марта 2012

Этот код основан на более старой версии Nancy. Вы должны смотреть на использование IResponseFormatterFactory вместо этого. Пользовательский модуль сборки, который определен в сообщении блога, основан на старой копии DefaultNancyModuleBuilder, и если вы посмотрите на текущую версию https://github.com/NancyFx/Nancy/blob/master/src/Nancy/Routing/DefaultNancyModuleBuilder.cs, вы сможете внести необходимые изменения

2 голосов
/ 17 апреля 2012

Вот код для обсуждаемого класса RavenAwareModuleBuilder:

Редактировать 1

Код ниже был обновлен для Nancy Release 0.12. Обратите внимание на новые NegotiationContext строки в методе BuildModule.

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;
    }
}
...