0

一部の自動化テストでブラウザ固有の resx ファイルを使用しようとしています。タイプをインスタンス化したいところに行き詰まっています。誰かが私を正しい方向に向けることができますか? 私は activator.createInstance などを試しましたが、うまくいきませんでした。

 public class WebAiiBaseTest : BaseTest
{
    private readonly IDictionary<BrowserType, Type> resxMapper = new Dictionary<BrowserType, Type>{
                                                                {BrowserType.Chrome, typeof(Chrome)}
                                                                , {BrowserType.Safari, typeof(Safari)}
                                                                , {BrowserType.FireFox, typeof(Firefox)}
                                                                , {BrowserType.InternetExplorer, typeof(InternetExplorer)}
                                                            };



    [TestFixtureSetUp]
    public void FixtureSetup()
    {
        Initialize();
        Launcher.LaunchRepairInformation();

    }

    [TearDown]
    public void TestCleanUp()
    {
        Launcher.NavigateToRepairInformation();
    }

    [TestFixtureTearDown]
    public void FixtureCleanup()
    {
        CleanUp();
    }

    protected object BrowserResx
    {
        get { return Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]); }

    } 


}

このコードはインスタンスを返しますが、オブジェクト型です。厳密に型指定されたインスタンスを返したいです。このように、CreateInstance のジェネリック オーバーロードを試しました。

return Activator.CreateInstance<resxMapper[ActiveBrowser.BrowserType]>(); 

しかし、Visual Studio はこの構文を好みません。ここで何が間違っていますか?ヒントやアドバイスをありがとう。

乾杯、
サンディエゴで~ck

4

2 に答える 2

0

私はまだあなたがやろうとしていることを正確に理解していませんが、ここで私が考えることができる唯一のことです、コメントスレッドがこれ以上明確になっているのかわかりません。

public interface IBrowser
{
}
public class Chrome: IBrowser
{
}
... 

protected IBrowser BrowserResx
{
    get { return (IBrowser)Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]); }

} 

または:

protected T BrowserResx<T> where T: IBrowser
{
        get { return (T)Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]); }
}

..クラスがジェネリックとして設計されている場合。ブラウザの種類やインターフェースの基本クラスがない場合、より強く型付けされたものを返す方法はありません。それらは共通の「オブジェクト」のみを共有します。

于 2011-03-01T20:15:51.590 に答える
0

コードのスペルが正しくありません。試してみましたか

return Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]);?

于 2011-03-01T19:48:16.930 に答える