2
当我目前使用的模式在我的DTO的同时获得标记与过滤器属性,还实现暴露出一些常见的变量,我想在我的服务使用,例如自定义的接口实现自定义过滤器:服务栈筛选模式
public interface IMyInterface
{
Int32 MyVariable { get; set; }
}
[MyFilter]
public class MyDto
: IMyInterface
{
public Int32 MyVariable { get; set; }
}
public class MyFilterAttribute
: Attribute
, IHasRequestFilter
{
public int Priority { get { return 0; } }
public IHasRequestFilter Copy() { return this; }
public void RequestFilter(IHttpRequest req, IHttpResponse res, object requestDto)
{
var temp = requestDto as IMyInterface;
if(temp != null)
{
var x = [something from the request object...]
temp.MyVariable = x;
}
}
}
这是预期的模式?或者有没有办法单独使用界面?有没有一种方法可以通过AppHost注册一个实现界面的所有dtos的过滤器?
感谢mthyz,我不知道RequestFilterAttribute。我会用它。 – sungiant 2013-04-09 13:55:35
也许我没有把它说得够好,但我真正想知道的是有一个具有MyFilter属性的dto的模式,并且还实现了IMyInterface。然后在属性的逻辑内将dto对象转换为IMyInterface并设置接口的属性。这是预期的模式?是否有一种方法可以通过AppHost注册一个实现给定接口的所有dtos的过滤器?看起来很乱,不得不用一个属性来标记dto,并让它实现一个接口。这是预期的用例吗? – sungiant 2013-04-09 14:05:45
我不知道为什么你需要IMyInterface,而不是直接投射到请求DTO?我只会使用一个接口来处理普通的DTO。这个例子也没有说明你为什么要使用过滤器,而不是在服务中正常处理它。 – mythz 2013-04-09 14:07:30