代码之家  ›  专栏  ›  技术社区  ›  Max Schmeling

获取app name/id的最佳实践[关闭]

  •  0
  • Max Schmeling  · 技术社区  · 16 年前

    //the rest of the story
    我在一家财富500强制造公司的内部网团队工作。我已经创建了一个公共库,所有新的.Net应用程序都将使用它。它查询公共数据库以获取有关应用程序的信息以及与问题无关的一堆其他内容。可以想象,公共库需要知道应用程序在调用它。我可以强制每个应用程序在某个静态类或其他东西上设置一个属性,但是我想让它更隐蔽一点。目前,它要求开发人员在app.config或web.config中设置一个键ApplicationName和一个值ApplicationName(这对我们来说是唯一的不变id)。然后使用当前使用的 ConfigurationManager.AppSettings["ApplicationName"] 把这个拉进来。

    4 回复  |  直到 12 年前
        1
  •  3
  •   EBGreen    16 年前

    也许有办法做到。因为我根本不打算回答你的实际问题,所以我很可能会为此投下一票,但我就是不能不说什么就继续前进。对我来说,这是一个最糟糕的耦合可能的例子。实际上,您必须查看数据库,并根据调用它的应用程序的不同而采取不同的行为?

        2
  •  1
  •   Troy Howard    16 年前

    Assembly.GetEntryAssembly

    然后使用返回程序集中的.Name属性。

        3
  •  0
  •   ejgottl    16 年前

    getenv()将获得环境变量,而环境变量又将提供所需的内容。但是一般来说,根据调用程序的名称有不同的行为是不可能的 被认为是最佳实践。例外情况是,如果您想在日志消息中打印出调用程序的名称。当然还有其他例外,你的情况可能就是其中之一。

        4
  •  0
  •   Troy Howard    16 年前

    我同意艾布格林的观点。这对我来说是个危险的问题。

    也就是说,我建议做与您建议的完全相反的事情,只需将键(应用程序名或其他名称)作为参数传递给您正在调用的函数。您可以将它作为公共静态属性烘焙到程序中,不管您的入口点是什么,并创建一个小的helper函数,基本上重载对存储库的调用。这将隐藏它并减少容易出错的重复。。

    public interface IIntranetApp
    {
        string GetApplicationName();
        void SetConnectionString(string connectionString);
        // etc... add methods as necessary
    }
    
    推荐文章