C# 如何在我的模块中使用BinaryConnection发送和接收数据
我有一个自定义模块C# 如何在我的模块中使用BinaryConnection发送和接收数据,c#,tcp,moryx,C#,Tcp,Moryx,我有一个自定义模块MyModule和一个自定义插件MyPlugin,在这个插件中,我想通过二进制连接发送和接收数据。 这是我的代码的简化版本 [ServerModule(ModuleName)] 公共类ModuleController:ServerModuleBase { 受保护的重写void OnInitialize() { Container.LoadComponents(); } 受保护的覆盖void OnStart() { Container.Resolve(); Container.R
MyModule
和一个自定义插件MyPlugin
,在这个插件中,我想通过二进制连接发送和接收数据。
这是我的代码的简化版本
[ServerModule(ModuleName)]
公共类ModuleController:ServerModuleBase
{
受保护的重写void OnInitialize()
{
Container.LoadComponents();
}
受保护的覆盖void OnStart()
{
Container.Resolve();
Container.Resolve().Start();
}
}
[插件(LifeCycle.Singleton,typeof(IMyPlugin),Name=PluginName)]
公共类MyPlugin:IMyPlugin
{
专用IBinaryConnection\u连接;
公共IBinaryConnectionFactory连接工厂{get;set;}
公共IBinaryConnectionConfig配置{get;set;}
公开作废开始()
{
_connection=ConnectionFactory.Create(配置,新的MyMessageValidator());
_connection.Received+=OnReceivedDoSomething;
_connection.Start();
}
}
当我启动运行时,我得到一个NullReferenceException,因为没有注入ConnectionFactory
。我的错误在哪里?要在模块中使用,您可以实例化并手动使用模块DI容器,正如您已经尝试过的,我建议您这样做
要在模块中使用它,需要将类注册/加载到容器中。看看资源管理是如何进行的。在您的初始化中,您需要:
Container.Register();//注册为工厂
Container.LoadComponents();//寄存器实现
然后,您可以向配置中添加一个BinaryConnectionConfig
条目,并使用[plugin无花果(typeof(IBinaryConnection),false)]
进行修饰,以从维护Web选择套接字以及客户机/服务器,或者直接使用派生类型TcpClientConfig
/TcpListenerConfig
公共类ModuleConfig:ConfigBase
{
[DataMember,PluginFigures(typeof(IBinaryConnection),false)]
公共二进制连接配置连接配置{get;set;}
}
在插件中,您可以插入IBinaryConnectionFactory
和ModuleConfig
来创建连接
公共类MyPlugin:IMyPlugin
{
专用IBinaryConnection\u连接;
公共IBinaryConnectionFactory连接工厂{get;set;}
公共模块配置{get;set;}
公开作废开始()
{
_connection=ConnectionFactory.Create(Config.ConnectionConfig,new MyMessageValidator());
_connection.Received+=OnReceivedDoSomething;
_connection.Start();
}
}
PS:在OnStart
中解析工厂将返回一个实例,您不使用该实例,并且该实例是不必要的。不要把Resolve
(查找已注册的实现并创建实例)与Register
混淆,谢谢,我想为了获得双工连接,我需要ConnectionFactory
为我创建两个连接,一个是侦听器连接,一个是客户端配置连接,不是吗,连接总是双工的。请参阅Send
-方法和Received
-事件。侦听器和客户端确定您是打开套接字还是连接到套接字。这就是为什么他们有不同的连接设置。