簡體   English   中英

按類型還是類型字符串來強類型化Azure移動服務表對象?

[英]Strongly typed Azure Mobile Service table object by type or type string?

我想為幾個應用程序使用單個移動服務。 我希望他們每個人都使用相同的類(即“日志”),但我希望服務器后端的信息進入單獨的表。 我正在從可移植類庫中執行此操作。

一種選擇是使用[DataTable(string)]屬性; 但是,我希望整個過程都自動化(即,單個DLL包含在項目中,該項目將根據上下文自動構造表名,即字符串+“ Log”)。 我找不到一種方法來修改DataTable屬性運行時以獲取對強類型表的引用。

除了使用弱類型表和自己對JSON進行序列化之外,我是否還有其他選擇?是否可以僅基於Type或Type名稱創建強類型引用?

無法在運行時中基於某些信息來更改數據表的名稱(Android SDK中存在此功能,因此您可以考慮創建功能請求以將其也添加到托管SDK中)。

但是,您可以做的是使用消息處理程序,該消息處理程序可以“調整”表相關操作的請求URI,以便您可以通過編程方式實現此目的。 基本上,除了要在多個應用程序之間共享的數據類型之外,您的可移植庫還將公開一個從DelegatingHandler擴展的類,該類可以執行此操作。 以下是此類處理程序的示例。

public class AppSpecificTableNamesHandler : DelegatingHandler
{
    public const string TablePrefix = "MyType";
    private const string TablesPathPrefix = "/tables/";

    private string tableSuffix;
    public AppSpecificTableNamesHandler(string tableSuffix)
    {
        this.tableSuffix = tableSuffix;
    }

    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        UriBuilder uriBuilder = new UriBuilder(request.RequestUri);
        string path = uriBuilder.Path;
        if (path.StartsWith(TablesPathPrefix + TablePrefix))
        {
            path = TablesPathPrefix + TablePrefix +
                this.tableSuffix + path.Substring(TablesPathPrefix.Length + TablePrefix.Length);
            uriBuilder.Path = path;
            request.RequestUri = uriBuilder.Uri;
        }

        return base.SendAsync(request, cancellationToken);
    }
}

您可以在https://gist.github.com/carlosfigueira/9582c08851d116f5a426中找到用於測試該解決方案的完整代碼(至少是最重要的類)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM