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