我正在开发使用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方法。但是这次当我同时从多个客户端调用我的服务时,服务抛出了#34;无法访问已处置的对象"例外。如何使我的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)
{
}
}
答案 0 :(得分:0)
由于您的方法$data = array(
'post_params'=>[
'Name1'=>'Foo',
'LastName1'=>'Bar',
'Name2'=>'Foo',
'LastName2'=>'Bar'
]
);
是私有的,您是否只在这里输入方法的参数?
如果是这样,“无事可做”
无论如何,只需创建一个包含所需参数的方法GetOrgService
,而不是调用您的属性public static IOrganizationService Service { get { return service;} }
。