私はナンシーの初心者です。REST API を作成するためのフレームワークとして使用しています。私は Json.NET に精通しているので、Nancy.Serialization.JsonNet
パッケージで遊んでいます。
私の目標: と の動作をカスタマイズする (つまり、設定を変更する) ことJsonNetSerializer
ですJsonNetBodyDeserializer
。
具体的には以下の設定を取り入れたい...
var settings = new JsonSerializerSettings { Formatting = Formatting.Indented };
settings.Converters.Add( new StringEnumConverter { AllowIntegerValues = false, CamelCaseText = true } );
組み込みの TinyIoC コンテナーを使用してこのカスタマイズを実行し、継承チェーンを回避して、Nancy.Serialization.JsonNet
パッケージの変更によって発生する可能性のある問題を制限したいと考えました。
注: 一時的な回避策として、継承を利用して と を作成CustomJsonNetSerializer
しCustomJsonNetBodyDeserializer
ました。
この構成を組み込むために、少なくともJsonNetSerializer
. JsonNetBodyDeserializer
TinyIoC を使用しての構成はまだ試していません。同様に行われると思います。私が試したすべての作業は私のものですCustomNancyBootstrapper
(から継承していDefaultNancyBootstrapper
ます)。
これまでで最も成功したアプローチ: オーバーライドConfigureApplicationContainer
protected override void ConfigureApplicationContainer( TinyIoCContainer container )
{
base.ConfigureApplicationContainer( container );
// probably don't need both registrations, and I've tried only keeping one or the other
var settings = new JsonSerializerSettings { Formatting = Formatting.Indented };
settings.Converters.Add( new StringEnumConverter { AllowIntegerValues = false, CamelCaseText = true } );
container.Register( new JsonNetSerializer( JsonSerializer.CreateDefault( settings ) ) );
container.Register<ISerializer>( new JsonNetSerializer( JsonSerializer.CreateDefault( settings ) ) );
}
コードをトレースJsonNetSerializer(JsonSerializer serializer)
し、JsonNet パッケージのコンストラクターを確認しました。
潜在的な問題: コンストラクターが 2 回呼び出されていることに気付きました。この動作は予期していませんでした。
初めてすべてが適切です-私のカスタマイズが追加され、適切に登録されます。ただし、2 回目は、設定のカスタマイズなしでタイプが再登録されます。再登録は、設定のカスタマイズを失った元の登録を置き換えるように見えます。
コンストラクターが2回目に呼び出されたときのコールスタックは、コンストラクターが呼び出され、構築しようとしているように見えることをGetEngine
示しています(私はセルフホストパッケージを使用しているため、これはprogram.csで発生します- )。GetEngineInternal
NancyEngine
using(var host = new NancyHost(uri))
ナンシーに何もしないように伝えるか、チェーンの後半部分に接続する必要があるようです。
どんな助けでも大歓迎です。