私は静的なクラスを持っており、インスタンスをいくつか注入する必要があります。静的クラスは静的コンストラクターを持つことができますが、パラメーターなしでなければなりません。だから、私はそれに何かを差し伸べるべきですか?Ninjectクラスと静的クラス - どのように?
シングルトンを作成したくありません。私は静的クラスを持ちたいと思っています。そのメソッドの1つは、注入すべきインスタンスに作用します。ベローは私が必要とするものの例です。
public static class AuthenticationHelper
{
// Fields.
private static object _lock = new object();
private static readonly UserBusiness _userBusiness; // <-- this field needs to be injected.
// Public properties.
public static User CurrentUser
{
get
{
if (IsAuthenticated)
{
User user = (User)Context.Session[SessionKeys.CURRENT_USER];
if (user == null)
{
lock (_lock)
{
if (user == null)
{
user = _userBusiness.Find(CurrentUserId);
Context.Session[SessionKeys.CURRENT_USER] = user;
}
}
}
return user;
}
return null;
}
}
public static int CurrentUserId { get; /* implementation omitted for brevity */ }
public static bool IsAuthenticated { get; /* implementation omitted for brevity */ }
}
背景情報:これはMVC4アプリケーションですので、私はninject.mvc3プラグインを使用しています。
PS:Ninjectと静的メソッドに関するいくつかの質問がありましたが、そのような問題に対処していないようです。
ありがとうございます。
Context.Session [CURRENT_USER]要素へのアクセスをロックすることですので。私はそれがとても悪い習慣であることに気づいていませんでしたが、あなたの説明で私は今それを分かりやすくして、あなたの助言に従います。とにかく、他のオプションがない場合、これを回避する方法を知っておくとよいでしょう。ありがとう! –
それは本当ですが、時にはできません。例えば、依存性注入を従来のアプリケーションに導入する場合、小さなステップで移動する必要があります。そのような一時的なステップの上にこのような解決策があります。それは醜いです、それは技術的な深さですが、一時的です(少なくともそれはすべきです)。しかし、あなたのアプリケーションがすでにDIを使用して構築されている場合、これを行う理由はまったくありません。 – Steven