、私は以下のコードをたくさん書いてきたことに気づいています一元化CloudStorageAccountとTableServiceContextインスタンスASP.NET MVC 3 Webロールで
var account =
CloudStorageAccount.Parse(
RoleEnvironment.GetConfigurationSettingValue("DataConnectionString")
);
var ctx =
account.CreateCloudTableClient().GetDataServiceContext();
だから、私は全体のASPのためにこれを一元化することにしました私は、コントローラ内部で以下のようにこれを使用しています、
internal class WindowsAzureStorageContext {
public static CloudStorageAccount StorageAccount {
get {
return
CloudStorageAccount.Parse(
RoleEnvironment.GetConfigurationSettingValue("DataConnectionString")
);
}
}
public static TableServiceContext TableServiceCtx {
get {
return
StorageAccount.CreateCloudTableClient().GetDataServiceContext();
}
}
}
そして:.NET MVCアプリケーションと私は静的プロパティで以下のクラスを作成し
public class HomeController : Controller {
private readonly TableServiceContext ctx =
WindowsAzureStorageContext.TableServiceCtx;
public ViewResult Index() {
var model = ctx.CreateQuery<TaskEntity>(Constants.TASKS_TABLE).
Where(x => x.PartitionKey == string.Empty);
return View(model);
}
public ViewResult Create() {
return View();
}
[ActionName("Create")]
[HttpPost, ValidateAntiForgeryToken]
public ViewResult Create_post(TaskEntity taskEntity) {
ctx.AddObject(Constants.TASKS_TABLE, new TaskEntity(taskEntity.Task));
ctx.SaveChangesWithRetries();
return RedirectToAction("Index");
}
}
私はこれが単体テストではないことを知っています。私はTableServiceContext
のインスタンスをDIでインターフェイスに渡す必要がありますが、私はそのときこのWindowsAzureStorageContext
クラスを使用してTableServiceContext
クラスのインスタンスを取得することを検討します。
これは良い方法ですか?アプリケーションのライフサイクル全体で同じクラスを使用しているため、いつでも私を傷つけるでしょうか?
これを行うためのパターンはありますか?
ありがとうございます!私がこの質問をしたのは、 'static'キーワードの完全な機能ができないからです。もし私がこれをすると、私は問題に終わるだろうと思っていた。 – tugberk