2013-10-16 43 views
1

我在我的WPF应用程序上使用caliburnMicro。CaliburnMicro - 解决调用方法

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

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

其中IMyserviceHost的每个执行保持WCFServiceHost属性。

在当前状态下,每个服务主机对象请求必须在解析对象后在代码中打开通道。 我希望每个服务主机请求解析将触发ServiceHost属性的Open()以打开服务器端通道(这是来自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(); 

回答

1

看看在SimpleContainer文档处理程序注册。这允许你注册一个func。从本质上讲,你可以注册这样的事情:

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

这会假设你已经以正常方式加入IMyServiceHost,这样我们可以激活或不提出要求。

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

+0

嘿Dean,这是我。我觉得可以自由地编辑你的答案来改进格式。很高兴见到你回来。 –

+0

很高兴回来:)父亲倾向于接管你的生活。欢迎编辑,看起来好多了! – McDonnellDean

+1

恭喜,这只是一个微小的编辑:)。 –