C#中的瓶颈进入模拟

C#中的瓶颈进入模拟

问题描述:

我想,以防止有人用模拟的方式进行交互,他不应该。唯一允许的方法是实现接口“IInteraction”的方法并将此交互添加到列表中。 SimulationController然后遍历该列表并在适当的时间执行该方法。 因此,与模拟相关的每个类只能通过IInteraction访问(无论IInteraction在哪里实现)。C#中的瓶颈进入模拟

我试图使模拟类内部,因为这会对其进行访问限制任何人。但交互需要参考模拟才能操纵它。对它的引用只能在模拟程序集的内部进行,这使得此方法无用,因为这样IInterface的实现不能在公共范围内实现。

+0

您是否在寻找建筑学答案?你需要做什么来实现像系统这样的插件? – Icepickle

+0

@dasblinkenlight IInteraction不应被隐藏。如果你正在引用最后一句话:我试图用内部的,没有真实的,IInteraction的实现也必须在模拟中,正如你所说的那样毫无意义。 – Butterkekskrumel

+0

@Butterkekskrumel我想你应该解释一下什么是错有'IInteraction'公开,因为对我来说,它看起来像你拥有这一切正确想通了。顺便说一下,您可以将内部结构暴露给选定的外部DLL列表。查找“内部可见的属性”。 – dasblinkenlight

IInteraction应该是公开的。但Simulation是内部的,IInteraction的实现无法访问它。

这个技巧是发布一个接口ISimulation,让程序到它的接口。一个internal实施ISimulation将保持从IInteraction实现隐藏。

public interface ISimulation { 
    void SetSomethingUp(); 
    void DoSomething(); 
} 
public interface IInteraction { 
    void Process(ISimulator simulator); 
} 
... 
internal class Simulator : ISimulator { 
    public void SetSomethingUp() { 
     ... 
    } 
    public void DoSomething() { 
     ... 
    } 
}