2011-12-05 68 views
0

身份驗證類應該是靜態的還是從實例創建的?身份驗證類應該是靜態的還是從實例創建的?

我有的問題是,我不能訪問身份驗證,而無需在任何控制器中注入它的實例,並且有點問題。

public class HomeController : Controller 
{ 
    //=> I WANT TO AVOID THIS! <= 
    //protected IAuthentification Authentification { get; private set; } 

    //public HomeController(IAuthentification authentification) 
    //{ 
    // Authentification = authentification; 
    //} 

    public ActionResult Index() 
    { 
     //Authentification.CreerUtilisateur(new Utilisateur { Nom = "Test", NomUsage = "ttt", MotDePasse = "ddsss" }); 
     return View(); 
    } 
} 
+0

可能的重複[如何處理與Ninject靜態方法的類?](http://stackoverflow.com/questions/2710718/how-do-i-handle-classes-with-static-methods-with- ninject) –

回答

2

是有點問題的。

什麼問題?什麼是'問題'?構造器注入是值得的。如果沒有,您是否在尋找Property Setter InjectionSetter Method Injection

請注意,即使您認爲它們更漂亮,管理所有這些的最明顯方法就是使用構造函數注入。

或者是有什麼我想念 - 你沒有詳細說明你的問題的實際問題。

+0

方法注射解決了我的問題。我不必每次都寫構造函數注入。這怎麼會成爲一個問題? – Rushino

+0

@Rushino:a)只有頂級組合根應該引用Ninject DLLs b)你可能會忘記在測試中初始化它c)你不能使後備字段只讀。我曾經像現在這樣思考,但使用我的重構工具來處理「痛苦」。這意味着我的課程總是告訴我課程需要什麼。話雖如此,如果您在更加本地化的背景下進行這項工作 - 例如只是主DLL中的控制器,這不是最糟糕的違規行爲。但話雖如此,我仍然不會這樣做! –

+0

是的,我明白你的意思了。我將使用Constructor注入,這會讓我知道我用於特定控制器的哪些通信工具。 – Rushino

相關問題