Nancyfx使用Json.net,登记依赖性误差

问题描述 投票:1回答:2

我试图用南希JSON.net,按照2种方式,我发现注册的依赖关系,但所有的方式让我有一个消息一个InvalidOperationException“出了点试图满足成分在依赖一个错误时,使确保您已注册的容器中的所有新的依赖并检查的InnerException更多细节。”含{“无法解析类型:Nancy.NancyEngine”}的内exection。

我使用的是自我托管运行南希和吉普车一切非常简单的能够只是为了测试。

   public static void Main(string[] args)
    {
        try
        {
            var host = new NancyHost(new Uri("http://localhost:8888/"));
            host.Start(); // start hosting
            Console.ReadKey();
            host.Stop();  // stop hosting
        }
        catch
        {
            throw;
        }
    }

首先,我创建一个customSerializer

public class CustomJsonSerializer : JsonSerializer
{
    public CustomJsonSerializer()
    {
        ContractResolver = new CamelCasePropertyNamesContractResolver();
        Formatting = Formatting.Indented;
    }
}

然后我试图注册使用IRegistrations的2种方式:

public class JsonRegistration : IRegistrations
{
    public IEnumerable<TypeRegistration> TypeRegistrations
    {
        get
        {
            yield return new TypeRegistration(typeof(JsonSerializer), typeof(CustomJsonSerializer));
        }
    }

    public IEnumerable<CollectionTypeRegistration> CollectionTypeRegistrations { get; protected set; }
    public IEnumerable<InstanceRegistration> InstanceRegistrations { get; protected set; }
}

而且还使用引导程序

public class NancyBootstrapper : DefaultNancyBootstrapper
{

    protected override void ConfigureApplicationContainer(TinyIoCContainer container)
    {
        base.ConfigureApplicationContainer(container);
        container.Register<JsonSerializer, CustomJsonSerializer>();
    }

}

这意味着,当自我托管我添加自定义的引导程序

var host = new NancyHost(new Uri("http://localhost:8888/"), new NancyBootstrapper());

这两种方式返回相同的错误。

json.net nancy
2个回答
0
投票

问题其实是,南希json.net包使用Newton.Json 6.0.0.0,但安装它会安装,将创建此问题自动更新版本的包时的版本。不知道有什么在Newton.JSON变化实际上将创建此。

https://github.com/NancyFx/Nancy.Serialization.JsonNet/issues/27


0
投票

我想补充我的来之不易知识在这方面,使用南希1.4.1大大折腾几个小时后。

如果您使用自定义的引导程序,确保你调用base.ConfigureApplicationContainer(container);你开始你的自定义登记之前。

所以,不是:

public class MyCustomBootstrapper : DefaultNancyBootstrapper
{
    protected override void ConfigureApplicationContainer(TinyIoCContainer container)
    {
        // MY BITS HERE...

        base.ConfigureApplicationContainer(container);
    }
}

但,

public class MyCustomBootstrapper : DefaultNancyBootstrapper
{
    protected override void ConfigureApplicationContainer(TinyIoCContainer container)
    {
        base.ConfigureApplicationContainer(container); // Must go first!!

        // MY BITS HERE...
    }
}

如果你不这样做,你会得到以下错误:

试图满足的依赖关系的一个组成过程中,请确保您已注册的所有新的依赖于容器和检查的InnerException更多详细信息时出现错误。

有一个有用的内部异常:

无法解析类型:Nancy.NancyEngine

改变这些C#语句的顺序的解决方案@StevenRobbins'出色答卷here(我可以救自己几个小时的痛苦,如果我只读正确的第一次)实际上是一笔带过。

史蒂芬说:

通过调用“基地”你曾经手动注册后,您可以有效复制在你的autoRegister的原登记。要么不来电基地,或者把它叫做你做你的手工登记之前。

© www.soinside.com 2019 - 2024. All rights reserved.