【发布时间】:2016-06-09 07:28:39
【问题描述】:
我正在开发一个使用 MS CRM 服务的 WCF 服务。我需要在多个地方初始化服务实例,这需要很长时间才能初始化。我通过如下实现单例模式解决了这个问题。
public sealed class MSCRM
{
private static readonly MSCRM instance = new MSCRM();
private static readonly IOrganizationService service =GetOrgService(true);
static MSCRM() { }
private MSCRM() { }
private static MSCRM Instance { get { return instance; } }
public static IOrganizationService Service { get { return service;} }
private static readonly object LockThread = new object();
private static IOrganizationService GetOrgService(bool admin = false, string callerId = null)
{
}
}
但我需要在我的 GetOrgService 方法中传递参数。我该怎么做?
编辑:我更改了代码并添加了公共 GetService 方法。但是这次当我同时从多个客户端调用我的服务时,服务会抛出“无法访问已处理的对象”异常。如何使我的 IOrganizationService 属性线程安全且单例。
public sealed class MSCRM
{
private static readonly MSCRM instance = new MSCRM();
private static IOrganizationService service;
static MSCRM() { }
private MSCRM() { }
public static MSCRM Instance { get { return instance; } }
public IOrganizationService GetOrgService(bool admin = false, string callerId = null)
{
return service ?? (service = GetService(admin, callerId));
}
private static IOrganizationService GetService(bool admin = false, string callerId = null)
{
}
}
【问题讨论】:
-
你已经在传递一个参数
true
标签: c# web-services wcf design-patterns singleton