Nancyfx使用 Json.net,注册依赖项错误



我正在尝试将 nancy 与 JSON.net 一起使用,请按照我找到的 2 种方法来注册依赖项,但一直让我进入 InvalidOperationException,并显示一条消息"在组合过程中尝试满足其中一个依赖项时出错,请确保您已在容器中注册了所有新的依赖项并检查 innerexception 以获取更多详细信息。 南希.南希引擎"}.

我正在使用自托管来运行南希和吉普车,一切都非常简单,只需进行测试即可。

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

首先我创建一个自定义序列化程序

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

然后我尝试了 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());

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

问题实际上是版本,nancy json.net 软件包使用的是 Newton.Json 6.0.0.0,但是在安装软件包时,它会自动安装会产生此问题的较新版本。不确定Newton.JSON中有什么变化会实际创建这个。

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

只是为了补充我在这个领域来之不易的知识,在使用 Nancy 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...
    }
}

如果不这样做,将收到以下错误:

尝试满足其中一个依赖项时出错 在合成过程中,请确保您已注册所有新的 容器中的依赖项并检查内部异常以获取更多信息 详。

有一个有用的内部例外:

无法解析类型:南希.南希引擎

更改这些 C# 语句顺序的解决方案实际上在 @StevenRobbins 的出色回答中有所提及(如果我第一次正确阅读,我可以为自己节省几个小时的痛苦)。

史蒂文说:

在手动注册后调用"base",您就是 通过自动注册有效地复制您的原始注册。 要么不要打电话给基地,要么在你做你的手册之前打电话给它 注册。

相关内容

  • 没有找到相关文章

最新更新