我正在處理通過接口加載不可信程序集的應用程序。每個程序集都應該能夠將一個或多個GameAction對象添加到服務器使用的線程安全隊列中。只寫隊列?
設計的第一次迭代是剛剛通過隊列 - 是這樣的:
public interface IGameClient
{
void HandleStateChange(IGameState gameState,
ref Queue<IGameAction> actionQueue);
}
但是,與此有關的問題是,它給共享隊列不可信組件入口,它允許操縱隊列中的其他成員並發現有關其他隊列操作的信息。
第二關是:
public interface IGameClient
{
void HandleStateChange(IGameState gameState);
GameActionDelegate event HasNewEvent; // passes IGameAction as a parameter
}
這裏的問題是,它並不一定允許訂購或行動組。
我真正希望的是能夠將引用傳遞給封裝線程安全隊列的對象,但只會公開Enqueue()。但是,我擔心一個不受信任的程序集可能會使用反射來操縱一個專用的Queue對象。
那麼,處理這個問題的最好方法是什麼?
「ref」並不是因爲它是必要的。這意味着第三方開發者會提示「這是爲了被操縱」(這是第一個草圖)。 – 2009-01-23 20:08:57