Новый объект от типа? В частности, файл resx. Я хочу другой рекс во время выполнения - PullRequest
0 голосов
/ 01 марта 2011

Я пытаюсь использовать специфичные для браузера файлы 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 в Сан-Диего

Ответы [ 2 ]

0 голосов
/ 01 марта 2011

Я все еще не понимаю, что вы пытаетесь сделать, но вот единственное, о чем я могу думать, я не уверен, что цепочка комментариев становится более понятной.

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]); }
}

.. если ваш класс был разработан как универсальный.Если нет базового класса для типов браузера или интерфейса, то нет способа вернуть что-то более строго типизированное: они имеют только общий «объект».

0 голосов
/ 01 марта 2011

Ваш код написан неправильно, вы пробовали

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

...