繁体   English   中英

在ASP.NET MVC 4中,静态类的替代方法是什么?

[英]What is the alternative to Static Class in asp.net mvc 4?

在这里看到静态类和静态函数不好,因为它们占用大量内存。

我将它用于需要与数据库等交互的许多事情。

此示例是静态本地化类的一部分,即GetResources

public static class SFLocalization
{

    public static string GetResources(string key)
    {
          string CurrentLanguage = System.Threading.Thread.CurrentThread.CurrentUICulture.ToString();
          if (MemoryCache.Default["Resources_" + key] == null)
          {
          string x 
          using (Db _db = new Db())
            {
                MemoryCache.Default["Resources_" + key] = _db.Languages.First(l => l.Key == key && l.LanguageCode == CurrentThread).Value;
            }
          }
          return MemoryCache.Default["Resources_" + key];
    }
}

然后在视图中,控制器等。我只写这个来获得转换后的值

 @SFLocalization.GetResources("NewsletterBoxTitle")

1.)在那种情况下,静态类真的那么糟糕吗?

2.)有什么选择? 也许依赖注入(ninject等。)? (我在《 Apress-Pro Asp.net Mvc 4》一书中看到了

静态类(或模块)通常是域或应用程序服务的替代品。 将该服务公开为静态类通常很方便,以便可以从任何地方访问它-如果是诸如本地化这样的跨领域问题,则尤其如此。

这种方法可以使您快速启动并运行,但是确实存在一些问题。 能够随时随地访问该服务会鼓励不良的编码习惯,并很容易导致产生意大利面条式的代码。 静态模块还使使用它们的类很难进行单元测试。 这两个问题都会随着您的项目规模的增加而成倍增加-因此,最好尽快解决这些问题。

正如您在问题中提到的那样,依赖注入是一种确保类可以访问服务而不使其成为静态/全局访问的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM