Как использовать фабричный метод вместе с интерфейсом - PullRequest
0 голосов
/ 23 декабря 2018

Я использую .Net 4.7.2 и C # 7

Я хочу предоставить данные с помощью XamlServices.Load Обычно я бы использовал что-то вроде этого

using System.Windows.Markup;
using System.Xaml;

[assembly: XmlnsDefinition( "http://MyNamespace.de" , "MyNamespace" )]

namespace MyNamespace
{

    public class MyExecutingClass
    {
        private void Load()
        {            
            var targetClass = XamlServices.Load( @"C:\MyFile.xml" ) as TargetClass;
            // ...
        }
    }


    public class TargetClass
    {
        public int Value { get; set; }

    }
}

Содержимое файла выглядит следующим образом:

<TargetClass xmlns="http://MyNamespace.de" Value="5" />

В моем случае у меня нет доступа к TargetClass , но к его интерфейсу ITargetClass

Итак, код выглядит следующим образом:

public class MyExecutingClass
{
    private void Load()
    {            
        var targetClass = XamlServices.Load( @"C:\MyFile.xml" ) as ITargetClass;
        // ...
    }

}

public interface ITargetClass
{
    int Value { get; set; }

}

/// <summary>
/// I can't access this class from the Load method
/// </summary>
internal class TargetClass : ITargetClass
{
    public int Value { get; set; }

}

И содержимое:

<ITargetClass xmlns="http://MyNamespace.de" Value="5" />

XamlServices.Load пытается создать экземпляр класса ITargetClass, который завершается неудачно, потому что вы можетене создавать интерфейс.

Выдается исключение MissingMethodException, которое говорит: Конструктор по умолчанию не найден для типа ITargetClass Тип может быть создан с помощью аргументов или директивы метода фабрики.

Какая реализация мне нужна?

Добавление

В основном мне нужна строка вроде этой:

ITargetClass targetClass = new ITargetClass();

Я знаю, чтоэто не так, как я это написал.Но может ли мне помочь заводской метод?Как бы это выглядело?

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