2017-07-28 10 views
2

リクエストごとにユーザコンテキストを作成します。このようなものですが、間違っていると感じます。リクエスト依存性注入によるユーザコンテキスト

container.Register<UserContext>(() => 
{ 
    var context = new UserContext(); 
    //add runtime data...     
    return context; 
}); 

次に、それを基本サービスレイヤークラスに入れて再利用します。

誰でもこれを達成するためのより良い方向に私を指摘できますか?

ありがとうございます。

答えて

2

オブジェクトグラフの構成はreliableである必要がありますので、with confidenceを作成することができます。これは基本的にはwe shouldn't construct them using runtime dataを意味します。

HttpContextとそのプロパティは、実行時のデータであり、オブジェクトグラフの構築中にそれをアクセス:

は、あいまいさの原因となる余分な責任を有する組成物のルートを複雑にし、それは非常に難しいあなたの正しさを確認することができますDI構成。

溶液は(コンストラクタを除く)は、そのメンバーのいずれかがアクセスされたときHttpContextのみアクセスされるようにUserContextをリファクタリングすることです。これにより、要求についての知識なしにUserContextを構築することができ、さらにステートレスおよびシングルトンにすることさえできます。物事が明確になり、記事がポイントにまっすぐに見えます迅速な対応スティーブン、のため

class HttpSessionUserContext : IUserContext 
{ 
    public int CurrentUserId => (int)HttpContext.Session["userId"]; 
} 
+0

ありがとう:referenced記事は、このような実装の一例を示しています。完璧な答え。 – gdp