Загрузка конкретного типа универсального класса с помощью отражения - PullRequest
0 голосов
/ 21 декабря 2010

В основном у нас был некоторый код из более старой версии нашего продукта, который использовал XML для управления загрузкой внешнего кода.

например

ObjectHandle handle = Activator.CreateInstance(
                                         information.AssemblyName,
                                         information.TypeName);

loadedObject = (T)handle.Unwrap();

Однако это не удается при попытке загрузитьтип с общим параметром.Теперь я знаю, каким будет тип во время компиляции (вероятно, этот тип также будет внешним и может меняться в зависимости от ситуации (только в xml)).

Есть ли способ загрузкикласс типа: где T имеет тип ActionSettings

public class MockTestRunner<T> : IRunner<T> where T : class
{
    #region IRunner<T> Members

    public T Run(string runnerXml)
    {
        MvcActionSettings mvcActionSettings = XmlSerialiser.XmlDeserialise<MvcActionSettings>(runnerXml);

        IMvcActionSettingsCreator creator = new MockPassThroughActionSettingsGenerator();
        var v = creator.Create(mvcActionSettings);
        return v as T;
    }

    public void Initialise(IWizardManagerBase manager)
    {

    }
}

    /// <summary>
/// An MVC controller settings object.
/// </summary>
[Serializable]
public class ActionSettings
{
    /// <summary>
    /// Initializes a new instance of the ActionSettings class.
    /// </summary>
    public ActionSettings()
    {
        PartialViews = new List<PartialViewEntity>();
    }

    public ActionSettings(bool endOfWizard)
    {
        EndOfWizard = endOfWizard;
    }

    public bool EndOfWizard
    {
        get;
        set;
    }}

С уважением, Джейми

1 Ответ

1 голос
/ 21 декабря 2010

Мех, как всегда, слишком сложно.Не понял, что я должен сделать:

public class MockTestControllerRunner : IRunner<Interfaces.ActionSettings>
{
    #region IRunner<T> Members

    public ActionSettings Run(string runnerXml)
    {
        MvcActionSettings mvcActionSettings = XmlSerialiser.XmlDeserialise<MvcActionSettings>(runnerXml);

        IMvcActionSettingsCreator creator = new MockPassThroughActionSettingsGenerator();
        Interfaces.ActionSettings v = creator.Create(mvcActionSettings);
        return v;
    }

    #endregion

    #region IRunnerWorkflowSubscriber Members

    public void Initialise(IWizardManagerBase manager)
    {

    }

    #endregion
}

Это устраняет необходимость в поиске решения проблемы с общим параметром при отражении.

С уважением, Джейми

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...