a) 让您的服务共享一个公共基类
不能让服务调用泛型方法签名作为入口点。但是您的服务可以继承一个公共服务基类,您的实现可以调用该基类,例如:
public class CompanyServices : MyServiceBase
{
public object Get(QueryCompany request)
{
return base.MyQuery(request);
}
}
b) 重写AutoQuery Services的默认类
如果希望所有AutoQuery服务保持不变,则对实现进行泛型化的另一个选项是提供自己的
Custom AutoQueryServiceBase class
所有AutoQuery Services都可以使用,例如:
public abstract class MyAutoQueryServiceBase : AutoQueryServiceBase
{
public override object Exec<From>(IQuery<From> dto)
{
var q = AutoQuery.CreateQuery(dto, Request.GetRequestParams());
return AutoQuery.Execute(dto, q).Results;
}
public override object Exec<From, Into>(IQuery<From, Into> dto)
{
var q = AutoQuery.CreateQuery(dto, Request.GetRequestParams());
return AutoQuery.Execute(dto, q).Results;
}
}
然后,您可以告诉AutoQuery将您的基类用于具有以下功能的所有AutoQuery服务:
Plugins.Add(new AutoQueryFeature {
AutoQueryServiceBaseType = typeof(MyAutoQueryServiceBase)
});
c) 动态生成服务入口点
如果您需要更多的灵活性,可以采用AutoQuery用于
generate your Services implementations and register them dynamically
/
2) 在上面的Company示例中,QueryableCompany类似乎与Company类非常相似,AutoQuery是否可以为Company类的成员提供一些属性,并避免创建另一个类似的QueryableCompany?
不能对请求查询DTO和正在查询的POCO数据模型使用相同的POCO,因为引用类定义中定义的类是一个构建错误,例如:
public class Company : IQuery<Company> {}
你可以使用继承来保存财产,尽管我个人
recommend against doing so for Request DTO
秒:
public class QueryCompany : Company, IQuery<Company> {}
由于C#不支持多重继承,您的公司类要么需要显式定义IQuery财产,要么继承
QueryBase
类,例如:
public class Company : QueryBase { ... }