zoukankan      html  css  js  c++  java
  • 自定义Data Service Providers — (5)最小化的运行时服务

    完整教程目录请参见:《自定义Data Service Providers — 简介

    在前面的教程中,我们已经实现了IServiceProviderIDataServiceMetadataProvider,现在我们继续。

    挂接IDataServiceQueryProvider实现

    现在我们打算实现IDataServiceQueryProvider接口,在之前我们先重构一下之前实现的IServiceProvider接口。

    public abstract class DSPDataService<T> :

        DataService<T>, IServiceProvider

    {

        public IDataServiceMetadataProvider _metadata;

        public IDataServiceQueryProvider _query;

     

        public DSPDataService()

        {

            _metadata = GetMetadataProvider(typeof(T));

            _query = GetQueryProvider(_metadata);

        } 

        public object GetService(Type serviceType)

        {

            if (serviceType == typeof(IDataServiceMetadataProvider))

                return _metadata;

            else if (serviceType == typeof(IDataServiceQueryProvider))

                return _query;

            else

                return null;

        }

     

        public abstract IDataServiceMetadataProvider

           GetMetadataProvider(Type dataSourceType);

     

        public abstract IDataServiceQueryProvider 

           GetQueryProvider(IDataServiceMetadataProvider metadata);

    }

    注意:你需要在你自己的实现类中实现GetQueryProvider方法。

    IDataServiceQueryProver实现可能需要IDataServiceMetadataProvider的实例,所以这里传入了这个参数。

    public class Sample : DSPDataService<object>

    {

        … 参见之前章节的代码

     

        public override IDataServiceQueryProvider

            GetQueryProvider(IDataServiceMetadataProvider metadata)

        {

            return new DSPQueryProvider<object>();

        }

    }

    实现IDataServiceQueryProvider

    如果你仅仅只是想看见服务契约和$metadata信息,那么实现CurrentDataSource属性就可以了,此接口的其他方法都是在调用查询返回ResourceSets时才会被调用。

    public class DSPQueryProvider<T> : IDataServiceQueryProvider

        T_currentDataSource;

        public object CurrentDataSource

        {

            get {

                return _currentDataSource;

            }

            set {

                _currentDataSource= value as T;

            }

        } 

        public object GetOpenPropertyValue(

            object target,

           string propertyName)

        {

            throw new NotImplementedException();

        }

        public IEnumerable<KeyValuePair<string, object>>

            GetOpenPropertyValues(object target)

        {

            throw new NotImplementedException();

        }

        public object GetPropertyValue(

            object target,

            ResourceProperty resourceProperty)

        {

            throw new NotImplementedException();

        } 

        public IQueryable GetQueryRootForResourceSet(

            ResourceSet resourceSet)

        {

            throw new NotImplementedException();

        } 

        public ResourceType GetResourceType(object target)

        {

            throw new NotImplementedException();

        } 

        public object InvokeServiceOperation(

             ServiceOperation serviceOperation,

             object[] parameters)

        {

            throw new NotImplementedException();

        } 

        public bool IsNullPropagationRequired

        {

            get { throw new NotImplementedException(); }

        }

    }

    好了,至少现在我们的自定义数据服务提供者能够跑起来了,虽然他仅能够提供元数据信息。

    让我们在浏览器中键入:http://localhost/sample.svc,现在你可以看见下面的画面:

    (译者注:在Visual Studio调试环境下,localhost后面需要有个动态端口)

    如果你键入http://localhost/sample.svc/$metadata的话,你应该看见这样的画面:

    当然,我们没有实现查询,如果你要导航到Products资源集的话,会收到一个错误(地址是:http://localhost/sample.svc/products

  • 相关阅读:
    [EasyUI美化换肤]更换EasyUi图标
    [干货来袭]MSSQL Server on Linux预览版安装教程(先帮大家踩坑)
    SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]
    对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)
    EntityFramework的多种记录日志方式,记录错误并分析执行时间过长原因(系列4)
    采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
    android ViewFlipper(翻转视图) 使用
    Android 下拉列表Spinner 使用
    Android选项卡TabHost功能和用法
    【android,eclipse解决】eclipse insert "}" to complete ClassBodyR.java
  • 原文地址:https://www.cnblogs.com/tansm/p/DSP5.html
Copyright © 2011-2022 走看看