我有一個靜態類,我需要注入一些實例。一個靜態類可以有一個靜態構造函數,但它必須是無參數的。那麼,我應該如何在其中注入某些東西?Ninject和靜態類 - 如何?
我不想創建一個單身人士。我希望有一個靜態類,它的一個方法對應該注入的實例進行操作。貝婁是我需要的一個例子。
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和靜態方法的問題,但他們都沒有解決像這樣的問題。
在此先感謝。
我明白了。我沒有意識到這是一個很糟糕的做法,但通過你的解釋,我現在可以理解它,並會遵從你的建議。無論如何,如果沒有其他的選擇,知道如何解決這個問題是很好的。謝謝! –
這是真的,有時你不能。例如,當向傳統應用程序引入依賴注入時,您將不得不小步移動。這些臨時步驟可能是這樣的解決方案。這是醜陋的,它是技術深度,但暫時的(至少應該是)。但是如果您的應用程序已經使用DI構建,那麼確實沒有理由這樣做。 – Steven