Я немного запутался в реализации интерфейса, все мои попытки сделать исправления, кажется, делают все решение более сложным и сломанным. Я уверен, что есть простой ответ, но я пока не могу его увидеть!
У меня есть эти два интерфейса (второй используется в списке первого):
public interface IUserDefinedListEditViewModel<T> where T : IUserDefinedListEntryEditViewModel<IBaseUserDefinedListModel>
{
string TypeName { get; set; }
IList<T> UserDefinedListEntries { get; set; }
}
public interface IUserDefinedListEntryEditViewModel<T> where T : IBaseUserDefinedListModel
{
string Display { get; set; }
T UserDefinedListEntry { get; set; }
}
У меня есть третий интерфейс, который реализован несколькими различными классами:
public interface IBaseUserDefinedListModel
{
Guid Id { get; set; }
string Name { get; set; }
bool IsSystem { get; set; }
}
Ниже приведена моя (неверная) попытка реализации:
public class APEditViewModel : IUserDefinedListEditViewModel<APEntryEditViewModel>
{
public string TypeName { get; set; }
public IList<APEntryEditViewModel> UserDefinedListEntries { get; set; } = new List<APEntryEditViewModel>();
}
public class APEntryEditViewModel : IUserDefinedListEntryEditViewModel<APModel>
{
public string Display { get; set; }
public APModel UserDefinedListEntry { get; set; }
}
public class BaseUserDefinedListModel : IBaseUserDefinedListModel
{
public Guid Id { get; set; }
[Required(ErrorMessage = "The Name field is required.")]
public string Name { get; set; }
public bool IsSystem { get; set; }
}
public class APModel : BaseUserDefinedListModel
{
public string NewValue { get; set; }
}
Основная ошибка, которую я получаю в данный момент, заключается в APEditViewModel, вот (урезанная) ошибка:
The type 'APEntryEditViewModel' cannot be used as type parameter 'T' in the
generic type or method 'IUserDefinedListEditViewModel<T>'. There is no
implicit reference conversion from 'APEntryEditViewModel' to
'IUserDefinedListEntryEditViewModel<IBaseUserDefinedListModel>'.
Я не уверен, нужен ли мне этот уровень универсальных интерфейсов, но из моих исследований и экспериментов я считаю, что мне это нужно. Я просто не совсем понимаю, и я думаю, что интерфейс IUserDefinedListEditViewModel
, которому нужен тип в интерфейсе типов (IUserDefinedListEntryEditViewModel
), кажется неправильным.
Извините, что я не проясняю себя, это довольно сложно объяснить, потому что я не уверен, где я иду не так, поэтому на любые вопросы я постараюсь ответить / обновить свой вопрос.