Не могу вызвать окно для обобщенного интерфейса ( Caliburn.Micro использование generic interface)

113
06 ноября 2019, 08:10

Я пытаюсь сделать окно для отображения списка разных типов и не могу вызвать окно для обобщенного интерфейса.

Сам интерфейс:

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

Answer 1

В итоге остановился на создании нового 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);
    }
}
READ ALSO
c# определить нажатие клавиши в консольном проекте [закрыт]

c# определить нажатие клавиши в консольном проекте [закрыт]

мне нужно определить нажатие клавиш в консольном проекте (не набора в консоли)

103
Возникает ошибка?

Возникает ошибка?

Выдает такую ошибку:

155
Для чего тут используется функция count()?

Для чего тут используется функция count()?

Для чего тут используется функция count(), ведь если isset() выполнится, то понятно, что массив содержит больше одного элемента или нет?

150
Parse error: syntax error, unexpected &#39;return&#39; (T_RETURN)

Parse error: syntax error, unexpected 'return' (T_RETURN)

Выдает ошибку в линии где return $this->urban();

129