如何解决如何在我的模块中使用BinaryConnection来发送和接收数据
我有一个自定义模块MyModule
,其中有一个自定义插件MyPlugin
,我想通过BinaryConnection发送和接收数据。
这是我的代码的简化版本
[ServerModule(ModuleName)]
public class ModuleController : ServerModuleBase<ModuleConfig>
{
protected override void OnInitialize()
{
Container.LoadComponents<IMyPlugin>();
}
protected override void OnStart()
{
Container.Resolve<IBinaryConnectionFactory>();
Container.Resolve<IMyPlugin>().Start();
}
}
[Plugin(LifeCycle.Singleton,typeof(IMyPlugin),Name = PluginName)]
public class MyPlugin: IMyPlugin
{
private IBinaryConnection _connection;
public IBinaryConnectionFactory ConnectionFactory { get; set; }
public IBinaryConnectionConfig Config { get; set; }
public void Start()
{
_connection = ConnectionFactory.Create(Config,new MyMessageValidator());
_connection.Received += OnReceivedDoSomething;
_connection.Start();
}
}
当我启动运行时时,由于未注入ConnectionFactory
,因此会收到NullReferenceException。我的错误在哪里?
解决方法
要在模块中使用the binary connection,您可以手动实例化TcpClientConnection
和TcpListenerConnection
,也可以使用模块DI容器,正如您已经尝试过的,我建议这样做。
要在模块中使用它,您需要将类注册/加载到容器中。看一下资源管理 registers them的情况。在您的OnInitialize
中,您需要:
Container.Register<IBinaryConnectionFactory>(); // Register as factory
Container.LoadComponents<IBinaryConnection>(); // Register implementations
然后,您可以在配置中添加一个BinaryConnectionConfig
条目,并用[PluginConfigs(typeof(IBinaryConnection),false)]
装饰,以从MaintenanceWeb中选择套接字以及客户端/服务器,或使用派生类型TcpClientConfig
/ { {1}}。
TcpListenerConfig
然后在您的插件中注入public class ModuleConfig : ConfigBase
{
[DataMember,PluginConfigs(typeof(IBinaryConnection),false)]
public BinaryConnectionConfig ConnectionConfig { get; set; }
}
和IBinaryConnectionFactory
来创建连接。
ModuleConfig
PS:在public class MyPlugin: IMyPlugin
{
private IBinaryConnection _connection;
public IBinaryConnectionFactory ConnectionFactory { get; set; }
public ModuleConfig Config { get; set; }
public void Start()
{
_connection = ConnectionFactory.Create(Config.ConnectionConfig,new MyMessageValidator());
_connection.Received += OnReceivedDoSomething;
_connection.Start();
}
}
中解析工厂将返回一个实例,您无需使用该实例,这是不必要的。不要将OnStart
(查找已注册的实现并创建实例)与Resolve
混淆。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。