MVC2 でマルチテナント Web アプリケーションを作成しました。アカウントの追加/削除は、共有データベース、共有スキーマ アプローチを選択したため、テーブル内の行の追加/削除と同じくらい複雑です。
これは、MSDN のマルチテナント データベース設計に関する非常に優れた記事です:マルチテナント データ アーキテクチャ
MVC で行う必要があったのは、ルーティングを適切にセットアップすることだけだったので、パスの最初の部分はアカウント名です。
- www.yourdomain.com/Account1/...
- www.yourdomain.com/Account2/...
- www.yourdomain.com/Account3/...
そして、リクエストごとにアカウントを検索するためのカスタム MvcHandler があります。
public class AccountMvcHandler : MvcHandler
{
public AccountModel Account { get; set; }
public AccountMvcHandler(RequestContext requestContext)
: base(requestContext)
{
}
protected override IAsyncResult BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, object state)
{
string accountName = this.RequestContext.RouteData.GetRequiredString("account");
Account = ServiceFactory.GetService<IAccountService>().GetAccount(accountName);
// URL doesn't contain valid account name - redirect to login page with Account Name textbox
if (Account == null)
httpContext.Response.Redirect(FormsAuthentication.LoginUrl);
return base.BeginProcessRequest(httpContext, callback, state);
}
}
Andreas Paulsson が言ったように、キー フレーズは「カスタム アセンブリ」です。構成に「カスタム アセンブリ」が必要なのはなぜですか? CodeEmit を使用していますか? ユーザーはそれらをアップロードしますか? クライアント固有のビジネス ロジックのカスタマイズには、Windows Workflow Foundationを使用することを検討したいと思います。