在ASP.NET MVC 3 Web角色中,我意识到我已经在编写以下代码很多:
var account =
CloudStorageAccount.Parse(
RoleEnvironment.GetConfigurationSettingValue("DataConnectionString")
);
var ctx =
account.CreateCloudTableClient().GetDataServiceContext();
因此,我决定将其集中到整个ASP.NET MVC应用程序,并创建了具有静态属性的以下类:
internal class WindowsAzureStorageContext {
public static CloudStorageAccount StorageAccount {
get {
return
CloudStorageAccount.Parse(
RoleEnvironment.GetConfigurationSettingValue("DataConnectionString")
);
}
}
public static TableServiceContext TableServiceCtx {
get {
return
StorageAccount.CreateCloudTableClient().GetDataServiceContext();
}
}
}
而且,我在控制器内部使用以下代码:
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");
}
}
我知道这不是单元测试友好的对象,我应该通过DI接口通过接口访问该
TableServiceContext
实例,但是当我这样做时,我也考虑使用该WindowsAzureStorageContext
类来获取TableServiceContext
类的实例。这是一个好习惯吗?因为我在整个应用程序生命周期中使用相同的类,所以在任何时候都会对我造成伤害吗?
有没有知道的模式可以做到这一点?
最佳答案
我认为这样做没有任何问题。看起来是一种不错的清洁方法。我不知道执行此操作的已知模式,但只是认为应该在昨天。