如何从非Blazor项目中运行Blazor Web应用并实现双向通信?
如何从非Blazor项目中运行Blazor Web应用并实现双向通信?
我最近在做项目时碰到了个棘手的需求:想要从一个非Blazor项目(就叫它MyApp.Service吧,这个项目本身还要处理其他一堆业务逻辑)里启动一个Blazor应用(MyApp.Blazor),而且这俩项目之间必须能实现双向通信。
先排除掉不可行的方案
一开始我最先想到的是把MyApp.Blazor做成独立可执行文件,让MyApp.Service不用管它的内部细节,直接把它当作一个独立进程启动就行。但这个方案根本走不通——因为Web应用和服务之间必须要能双向传消息,独立进程的方式完全满足不了这个核心需求。
原本我觉得逻辑上靠谱的方向是把Blazor应用直接集成到MyApp.Service的进程里,通过进程内的机制来实现双向交互,比如可以这么做:
- 不在外部单独启动Blazor应用,而是在MyApp.Service里直接初始化并启动Blazor的宿主服务(比如
WebApplication实例) - 搞一个双方都能引用的共享类库,定义好通信用的接口、消息模型还有事件委托,这样两边都能基于这个约定来收发消息
- 借助依赖注入,把共享的通信服务注入到Blazor组件和MyApp.Service的业务逻辑里,这样两边就能随时给对方发消息、监听对方的消息了
备注:内容来源于stack exchange,提问作者Josh Brunton
相关产品推荐
相关产品推荐

