1

我在我的 WPF 应用程序上使用 caliburnMicro。

除了作为 UI 应用程序之外,它也是进程间通信服务器(我们使用WCF命名管道)。

每个服务主机都注册为单例 ( container.RegisterSingleton(typeof (IMyServiceHost), null, typeof (MyServiceHost));)。

每个实现都IMyserviceHost持有WCF ServiceHost财产的地方。

在当前状态下,每个服务主机对象请求必须在解析对象后在代码中打开通道。我希望每个服务主机的解析请求都会触发该Open()属性ServiceHost以打开服务器端通道(这是来自 IPC 服务器端)。

是否可以使用现有的 Caliburn Micro 方法?

注册码:

container.RegisterSingleton(typeof (IMyServiceHost), null, typeof (MyServiceHost));

然后解析代码:

//Resolve the object
var serviceHost = IoC.Get<IMyServiceHost>();
//Then open the channel
serviceHost.Instance.Open();
4

1 回答 1

1

查看SimpleContainer文档中的处理程序注册。这允许您注册一个函数。基本上你可以注册这样的东西:

() => {
   var serviceHost = IoC.Get<IMyServiceHost>();
   serviceHost.Instance.Open();
   return serviceHost;
}

这将假设您已经IMyServiceHost以正常方式添加,这样我们可以请求激活或不激活。

另一种选择是在全球范围内进行。在同一文档的高级功能中,您可以设置一个全局激活钩子,它可以对任何对象进行高级初始化,只需进行类型检查,IMyServiceHost然后在返回对象之前调用您需要的方法。

于 2013-10-16T09:11:00.560 回答