在Visual Studio / .NET项目中共享代码的正确项目组织和体系结构

时间:2015-12-24 16:03:52

标签: visual-studio architecture code-sharing code-separation

我正在寻找有关如何在多个Visual Studio项目之间最佳共享代码的建议。我正在努力解决一个基本话题,试图找到一些想法来克服它。

我的解决方案有:

  • 多个网络应用项目
  • 多个独立的流程项目,例如Windows服务和/或控制台应用程序和/或Azure WebJobs

所有项目通用的功能示例是需要调用一些常见的Web服务,或者需要从Amazon S3读取和写入。

我努力的地方就是:显然,实现公共功能的代码应该自行分解,例如在一个单独的类库项目中。例如,与S3交谈,代码需要知道我的Amazon凭据,S3端点等 - 所有这些通常都存储在应用程序配置文件中。但我不喜欢将配置文件放在类库项目中的想法,因为它将特定的实现绑定到它们。但是为了不这样做,我必须从调用项目中传递这些信息。例如,Web应用程序的web.config和控制台应用程序的app.config文件包含此连接信息。在调用S3代码时,我会假设将此配置信息传递给共享代码。

然而,这对我来说似乎很难吃,我不知道为什么。我仍然觉得我将S3代码(例如)绑定到特定的配置方法,如果这有意义的话。我不确定我的感觉是否是一种错误的偏见。

*例如,我可能需要传递任意数量的配置数据:

  • 连接字符串
  • 网络服务的凭据
  • API端点
  • 来自我的应用程序配置设置的任意数据(一些调用者需要,但其他人不会,所以很多时候数据将无用但我必须做传递的工作)

所以每次我在主应用程序中添加一个配置变量时,我都必须修改公共代码的构造函数。事情会不断发生。

你能就此提出建议吗?

1 个答案:

答案 0 :(得分:0)

我喜欢使用Configuration对象作为参数,即使添加/删除属性,签名也不会改变。例如......

public class AmazonConfigSettings {
    public string AWSkey { get; set; }
    public string ApiEndpoint { get; set; }
    ......
}

您的签名可能总是如下:

public MySharedClass(AmazonConfigSettings config) { .... } 

即使(亚马逊)完全改变了他们的网络服务设置。