Static 身份验证类应该是静态的还是从实例创建的?

Static 身份验证类应该是静态的还是从实例创建的?,static,ninject,Static,Ninject,身份验证类应该是静态的还是从实例创建的 我的问题是,如果不在任何控制器中注入身份验证实例,我就无法访问身份验证,这有点问题 public class HomeController : Controller { //=> I WANT TO AVOID THIS! <= //protected IAuthentification Authentification { get; private set; } //public HomeController(I

身份验证类应该是静态的还是从实例创建的

我的问题是,如果不在任何控制器中注入身份验证实例,我就无法访问身份验证,这有点问题

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();
    }
}
公共类HomeController:控制器
{
//=>我想避免这种情况!
这有点问题

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();
    }
}
问题是什么?什么是“有问题的”?构造函数注入是值得努力的。如果不是,你是在寻找还是

请注意,即使您认为它们更漂亮,管理所有这些的最清晰的方法就是使用构造函数注入


或者是我遗漏了什么-你没有在问题中详细说明你的实际问题。

方法注入的可能重复修复了我的问题。我不必每次都编写构造函数注入。这怎么可能是个问题?@Rushino:a)只有顶级合成根应该引用Ninject DLL b)你可能忘记初始化在测试c)中,你不能将支持字段设置为只读。我以前的想法和你现在一样,但使用我的重构工具来处理“痛苦”。这意味着我的重构者总是告诉我一个类需要什么。话虽如此,如果你是在一个更本地化的上下文中执行此操作,例如,只在主DLL中使用控制器,这不是最坏的可能性违反了。但话说回来,我还是不会这么做!是的,我明白你的意思。我将使用构造函数注入,这将让我知道我正在为特定的控制器使用哪种Common工具。@Rushino:另外,当你总是有两个东西在一起时,显式将更容易发现,这通常意味着缺少一个abstra动作。只要你有一个重构工具,它是相当轻松的。我在这本书之前已经解决了这个问题,但如果你有任何疑问,可以高度推荐购买-它涵盖了从上到下的基于DI的架构,具有极好的细节和清晰度