Я разрабатываю службу WCF, использующую службы MS CRM. Мне нужно инициализировать экземпляр службы в нескольких местах, и это займет много времени для init. Я решил эту проблему с реализацией singleton-шаблона, как показано ниже.Объект Singleton с параметризованным конструктором
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. Как я могу это сделать ?
EDIT: Я изменил свой код и добавил общедоступный метод GetService. Но на этот раз, когда я вызываю свое обслуживание у нескольких клиентов одновременно, служба бросает исключение «не может получить доступ к удаленному объекту». Как я могу сделать свой ресурс IOrganizationService потокобезопасным и singleton.
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' –