I次のコードを持っている:このプロパティを最初にアクセスしたときにのみ作成されるようにするにはどうすればよいですか?
/// <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プロパティでこれを行うと考えましたが、プロパティからsetを呼び出すのは変です。
.NET 4.0レイジーオブジェクトで_sharedBrowserをラップすることも考えましたが、次にLazyでラップされたものを直接インスタンス化する方法がわかりません。これは、共有プロパティでユーザーは(再取り付け後に)取得します。
私は共有プロパティの.setロジックを.getに複製せずにこれをどうすることができないのか分かりません。
アイデア?
お使いのブラウザの工場は、複数のスレッドによって使用されていますか? – insipid
@insipidは、MSTestテストメソッドで使用されます。これらのメソッドは、性質上、異なるスレッドから実行されます。 – KingNestor