У меня есть следующий код:
/// <summary>
/// BrowserFactory responsible for deciding if you should receive a shared or isolated browser instance.
/// </summary>
public static class BrowserFactory
{
/// <summary>
/// Shared Browser Instance
/// </summary>
private static SharedBrowser _sharedBrowser;
/// <summary>
/// The window handle of the shared browser instance.
/// </summary>
private static string _sharedHwnd;
/// <summary>
/// The last thread id to access the shared browser.
/// </summary>
private static int _sharedThreadId;
static BrowserFactory()
{
Shared= new SharedBrowser();
}
private static SharedBrowser Shared
{
get
{
var currentThreadId = GetCurrentThreadId();
if (currentThreadId != _sharedThreadId)
{
_sharedBrowser = IE.AttachTo<SharedBrowser>(Find.By("hwnd", _sharedHwnd));
_sharedThreadId = currentThreadId;
}
return _sharedBrowser;
}
set
{
_sharedBrowser = value;
_sharedHwnd = _sharedBrowser.hWnd.ToString();
_sharedThreadId = GetCurrentThreadId();
}
}
public static Browser GetBrowser()
{
return BrowserSettings.UseSharedBrowser ? Shared : new Browser();
}
}
Как мне сделать так, чтобы я создавал экземпляр объекта SharedBrowser только при первом обращении к свойству, а не в конструкторе?
СначалаЯ думал сделать это в свойстве Shared, но казалось странным вызывать набор из свойств get.
Я также думал о том, чтобы _sharedBrowser был обернут в объект .NET 4.0 Lazy, но потомЯ не уверен, как напрямую создать экземпляр чего-то, завернутого в Lazy, что мне и нужно сделать в свойстве Shared, когда пользователь получает (после повторного присоединения).
Я не вижу, как яможет ли это без дублирования моей логики .set общих свойств в .get.
Есть идеи?