在本文中,将探讨如何创建一个类库来封装对Azure存储的访问,并使用NuGet包进行配置。将通过C#语言实现这一过程,以便在ASP.NET Core Web应用程序中使用。
首先,需要创建一个类库项目。在Visual Studio中,选择“文件”->“新建”->“项目”,然后选择“类库(.NET Core)”。
接下来,需要添加Azure存储的NuGet包。在项目中右键点击“依赖项”,然后选择“管理NuGet包”。搜索并安装“WindowsAzure.Storage”包。
需要创建一个类来封装Azure存储的设置。这个类将包含存储账户、存储密钥和表名。
public class AzureTableSettings
{
public AzureTableSettings(string storageAccount, string storageKey, string tableName)
{
if (string.IsNullOrEmpty(storageAccount))
throw new ArgumentNullException("StorageAccount");
if (string.IsNullOrEmpty(storageKey))
throw new ArgumentNullException("StorageKey");
if (string.IsNullOrEmpty(tableName))
throw new ArgumentNullException("TableName");
this.StorageAccount = storageAccount;
this.StorageKey = storageKey;
this.TableName = tableName;
}
public string StorageAccount { get; }
public string StorageKey { get; }
public string TableName { get; }
}
接下来,需要创建一个类来封装对Azure存储的访问。这个类将包含一个私有的辅助方法来访问存储。
private async Task<CloudTable> GetTableAsync()
{
CloudStorageAccount storageAccount = new CloudStorageAccount(
new StorageCredentials(this.settings.StorageAccount, this.settings.StorageKey),
false);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference(this.settings.TableName);
await table.CreateIfNotExistsAsync();
return table;
}
现在,需要添加一些公共方法来实现存储的CRUD操作。
public async Task<List<T>> GetList()
{
CloudTable table = await GetTableAsync();
TableQuery<T> query = new TableQuery<T>();
List<T> results = new List<T>();
TableContinuationToken continuationToken = null;
do
{
TableQuerySegment<T> queryResults = await table.ExecuteQuerySegmentedAsync(query, continuationToken);
continuationToken = queryResults.ContinuationToken;
results.AddRange(queryResults.Results);
}
while (continuationToken != null);
return results;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IAzureTableStorage<Movie>>(factory =>
{
return new AzureTableStorage<Movie>(
new AzureTableSettings(
storageAccount: Configuration["Table_StorageAccount"],
storageKey: Configuration["Table_StorageKey"],
tableName: Configuration["Table_TableName"]
));
});
services.AddScoped<IMovieService, MovieService>();
services.AddMvc();
}