Я использую .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();
Я знаю, чтоэто не так, как я это написал.Но может ли мне помочь заводской метод?Как бы это выглядело?