强类型Azure移动服务表对象按类型或类型字符串



我想为几个应用程序使用一个单一的移动服务。我希望它们每个都使用相同的类(即'Log'),但我希望服务器后端上的信息转到单独的表。我是从一个可移植类库中完成的。

一个选项是使用[DataTable(string)] attribute;然而,我希望整个事情是自动化的(即单个DLL包含在项目中,将自动从上下文构建表名,即字符串+"日志")。我找不到一种方法来修改DataTable属性运行时以获得对强类型表的引用。

除了使用弱类型表和自己序列化JSON之外,我还有其他选择吗?或者有可能仅基于类型或类型名称创建强类型引用吗?

根据运行时的某些信息更改数据表的名称是不可能的(此功能存在于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找到我用来测试的解决方案的完整代码(至少是最重要的类)。

相关内容

  • 没有找到相关文章

最新更新