【发布时间】:2017-11-25 08:27:07
【问题描述】:
我有一个关于自托管 WCF 服务和其他业务类之间交互的相当简单的设计问题。
这是 WCF 服务合同:
/// <summary>
/// Represent requests on hardware components made by a client to the controler service
/// </summary>
[ServiceContract(CallbackContract = typeof(IHardwareServiceCallback))]
public interface IHardwareService
{
[OperationContract(IsOneWay = true)]
void OpenLeftDrawer();
[OperationContract(IsOneWay = true)]
void OpenRightDrawer();
}
服务实现
public class HardwareService : IHardwareService
{
public void OpenLeftDrawer()
{
}
public void OpenRightDrawer()
{
}
}
一个用于处理有关服务器上客户端调用的业务逻辑的类
class DrawerRequestManager
{
// Server side Business logic to handle OpenDrawer requests from client
}
托管场景
Uri adrbase = new Uri(srvConfig.Address);
var host = new ServiceHost(typeof(HardwareService), adrbase);
host.AddServiceEndpoint(typeof(IHardwareService), srvConfig.Binding, srvConfig.Address);
host.Open();
既然这是管理服务实例生命周期的主机,那么处理服务实例和业务逻辑类之间链接的正确方法是什么(例如DrawerRequestManager)。 p>
我正在使用 IOC 容器,但我也对不使用 IOC 容器时的响应感兴趣。
提前致谢!
【问题讨论】:
-
答案取决于
DrawerRequestManager类实例的生命周期的限制。有时它必须是单例的,有时您可以创建任意数量的实例 - 取决于您与硬件的通信方式。如果您提供更多详细信息是什么限制,那么可以提供一些东西。 -
'DrawerRequestManager' 是一个已注册的 IOC 单例,这里对硬件的访问完全不相关,因为它将由 'DrawerRequestManager' 引用的其他子层处理
标签: wcf self-hosting