【问题标题】:Can I prevent instantiation of a certian type, except through a helper class? With Resharper or StyleCop perhapse?我可以防止某种类型的实例化,除非通过帮助类?也许是 Resharper 或 StyleCop?
【发布时间】:2013-05-06 13:14:09
【问题描述】:

在安全审核之后,我试图在我们的 MVC 应用程序中强制创建安全的 HttpCookie。我想出了一个帮助类来创建它们:

public static class CookieHelper
{
    /// <summary>
    /// Create Cookie.
    /// </summary>
    /// <param name="name">Cookie name.</param>
    /// <param name="value">Cookie value.</param>
    /// <returns>A cookie.</returns>
    public static HttpCookie CreateSecureCookie(string name, string value)
    {
        if (string.IsNullOrEmpty(name))
        {
            throw new ArgumentNullException("name");
        }

        var cookie = new HttpCookie(name, value);

        cookie.Secure = true;

        return cookie;
    }
}

我在我们目前正在创建 cookie 的地方加入了这个,所以我们现在没事了。但是,我们是一个成长中的组织,很多人将在代码库中工作,所以我有点担心人们将来会在这个助手类之外创建新的 cookie。

有没有一种方法可以在 Resharper、StyleCop 或其他任何东西中设置一个规则来阻止新 HttpCookie() 的实例化,除了助手类?

【问题讨论】:

  • 您可以将 CookieHelper 和 HttpCookie 放在自己的程序集中,并将 HttpCookie 标记为私有。因此,如果有人想使用它,您必须引用该程序集,并且只能通过 Helper 访问它,只要他们不在该程序集中实现
  • @derape - HttpCookieSystem.Web 的一部分。
  • @Levitikon - 代码审查应该抓住不使用你的包装类的人。
  • 或者你可以很容易地创建StyleCop 规则来报告它,然后在 CI 中轻松地捕获它。不会阻止实例化,但您会立即知道何时有人会这样做,并且能够解决和讨论这个问题
  • 谢谢@Pako,这应该可以解决问题!

标签: c# .net asp.net-mvc httpcookie


【解决方案1】:

在构建自己的类时,您可以通过将构造函数设为私有(或内部)来防止访问。但是,当您处理从其他地方(如 BCL)提供的现有类时,您必须使用允许的内容。

您最好在这里强制执行安全 cookie,以构建更高级别的架构,接受 SecureCookieIEnumerable&lt;SecureCookie&gt; 作为所需函数的参数。

【讨论】:

    猜你喜欢
    • 2013-05-18
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    相关资源
    最近更新 更多