一般的に悪い、悪いパターンであることに加えて、リクエストの存続期間中、オブジェクトをnancyモジュールのプロパティとして格納するためにこのようなことを行うことの影響はありますか?すべてが問題ないように見えますが、これが大規模な奇妙さをもたらすかどうかはわかりません...つまり、リクエスト間のクロストーク、メモリリーク、一般的なシェナニガン。
public class APIModule : NancyModule
{
public SomeConvolutedThing MyThing { get; set; }
public APIModule()
{
Before += ctx => {
try
{
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(HttpContext.Current.Request.Cookies["MyThing"].Value);
MyThing = JsonConvert.DeserializeObject<SomeConvolutedThing>(ticket.UserData);
}
catch
{
MyThing = null;
}
return null;
};
Get["/api/callit"] = parameters => {
// check on status of MyThing before deciding what to return
};
}
}
@StevenRobbinsが言ったように、あなたはそうすることができます、しかし問題は-なぜですか?提供したスニップの場合、コンストラクターでローカル変数を使用するだけで十分です。
私はこれを持ちたいと思う他のいくつかの理由を想像することができます:
ルートはプライベートメソッドを使用して作業を行います。次に、プライベート読み取り専用フィールドが機能します(同じ理由で、各モジュールは要求ごとに作成されます)。またはさらに良いことに、これらのプライベート関数をパラメーターとしてmyThingを受け入れ、ctorでローカル変数を使用するようにします。
モジュールの外部でこれにアクセスしたい-モジュールの外部でこれを保持するために独自のクラスを作成することをお勧めします。「リクエストごとに」登録し、beforerequestフックを使用してデータを入力し、他の機能が必要とするものに注入します。
(2)について詳しく説明します。
public interface IMyThingBag
{
MyThing MyThing{get;set;}
}
public class MyBagFiller : IRequestStartup
{
private readonly IMyThingBag _bag;
public MyBagFiller(IMyThingBag bad)
{
_bad = bag;
}
public void Initialize(IPipelines pipelines, NancyContext context)
{
_bag.MyThing = new MyThing{.....};
}
}
これで、チェーンのどこにいても(リクエストごとにパーツを登録する必要があります)、バッグを注入して使用できます:)
そこにデータが必要な場合は、モジュールに挿入することもできます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加