1

我正在构建一个 SaaS 应用程序,我想保留我拥有的单一代码库。我想在单独的子域 cust1.saascompany.com、cust2.saascompany.com 等中。但是,我没有任何 TenantID,并且出于多种原因更愿意为每个客户保留单独的数据库(主要的一个是它已经以这种方式编码并且在使用保证之前更改它是没有意义的)。数据库中包含用户登录成员资格。

我猜我需要单独的 web.configs 来连接字符串?或者我应该创建一个单独的数据库来存储所有连接字符串和任何应用程序级变量/常量?最终,我希望能够自动执行此配置(同样,当使用需要时)。

是否有任何人可以向我指出有关如何通过步骤进行设置的文章或帖子?我一直无法找到我要找的东西。

4

1 回答 1

2

从技术上讲,这很简单。我们多年来一直这样做。尽管我们使用不同的约定(my.domain.com/cust1加上my.domain.com/cust2url 重写),但这并没有改变任何东西。

所以,这就是你要做的。您创建连接字符串提供程序的抽象规范:

public interface ICustomerInformationProvider
{
    string GetConnectionString( string CustomerId );  
    ... // perhaps other information
}

然后你提供你想要的任何实现,比如:

public class WebConfigCustomerInformationProvider : ICustomerInformationProvider { ... }
public class DatabaseConfigCustomerInformationProvider : ICustomerInformationProvider { ... }
public class XmlConfigCustomerInformationProvider : ICustomerInformationProvider { ... }

并且您以某种方式将您的接口映射到实现上(例如,使用您选择的 IoC 容器)。

这使您有机会在部署期间配置提供程序,例如,开发人员可以使用一个提供程序(从文件中读取连接字符串),而生产环境中可以使用另一个提供程序(从数据库中读取连接字符串,这很容易规定)。

如果您还有其他问题,请随时提出。

于 2012-05-25T16:51:17.847 回答