在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类的实例。

这是一个好习惯吗?因为我在整个应用程序生命周期中使用相同的类,所以在任何时候都会对我造成伤害吗?

有没有知道的模式可以做到这一点?

最佳答案

我认为这样做没有任何问题。看起来是一种不错的清洁方法。我不知道执行此操作的已知模式,但只是认为应该在昨天。

10-06 15:52