Я пытаюсь сделать окно для отображения списка разных типов и не могу вызвать окно для обобщенного интерфейса.
Сам интерфейс:
public interface IItemsViewModel<T> : IScreen
{
string Title { get; }
T Item { get; set; }
IList<T> Items { get; }
void cmdAdd();
void cmdDelete();
}
Его реализация:
public class CompaniesViewModel : Screen, IItemsViewModel<CompanyModel>
{
private readonly ICompanyService _companyService;
public CompaniesViewModel(ICompanyService companyService)
{
_companyService = companyService;
}
public string Title { get; set; } = "Компании";
public CompanyModel Item { get; set; }
public IList<CompanyModel> Items { get; private set; }
public void cmdAdd(){}
public void cmdDelete(){}
}
Вызов осуществляется:
var model = _scope.Resolve<IItemsViewModel<CompanyModel>>();
bool? result = _windowManager.ShowDialog(model);
Интерфейс связывается с помощью autofac:
builder.RegisterType<CompaniesViewModel>().As<IItemsViewModel<CompanyModel>>();
Выводится ошибка, что не найдено view для CompaniesViewModel
В итоге остановился на создании нового WindowManager с переопределенным методом:
public class GenericWindowsManager : WindowManager, IGenericWindowsManager
{
protected override Window EnsureWindow(object model, object view, bool isDialog)
{
if (model.GetType().GetInterfaces().Any(x => x.IsGenericType &&
x.GetGenericTypeDefinition() == typeof(IItemsViewModel<>)))
{
view = new ItemsView() as object;
}
return base.EnsureWindow(model, view, isDialog);
}
}
мне нужно определить нажатие клавиш в консольном проекте (не набора в консоли)
Для чего тут используется функция count(), ведь если isset() выполнится, то понятно, что массив содержит больше одного элемента или нет?
Выдает ошибку в линии где return $this->urban();