Когда можно использовать неуниверсальную версию MvxAppCompatSetup <T>? - PullRequest
4 голосов
/ 12 октября 2019

В MvvmCross есть MvxAppCompatSetup и MvxAppCompatSetup<TApplication> (что на самом деле происходит от MvxAppCompatSetup). И то, и другое реализовано в файле MvxAppCompatSetup.cs .

Я действительно не могу себе представить, когда можно было бы использовать только MvxAppCompatSetup вместо MvxAppCompatSetup<TApplication>, так как, как я понимаю, всегда будет иметьTApplication - это на самом деле App, который определен в проекте Core.

Мне любопытно: когда будет иметь смысл использование неуниверсальной версии MvxAppCompatSetup / почему она существует?

Код универсальной и неуниверсальной версии из MvxAppCompatSetup.cs file:

public abstract class MvxAppCompatSetup : MvxAndroidSetup
{
    protected override IEnumerable<Assembly> AndroidViewAssemblies =>
        new List<Assembly>(base.AndroidViewAssemblies)
        {
            typeof(Toolbar).Assembly,
            typeof(DrawerLayout).Assembly,
            typeof(MvxSwipeRefreshLayout).Assembly
        };

    protected override IMvxAndroidViewPresenter CreateViewPresenter()
    {
        return new MvxAppCompatViewPresenter(AndroidViewAssemblies);
    }

    protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
    {
        MvxAppCompatSetupHelper.FillTargetFactories(registry);
        base.FillTargetFactories(registry);
    }

    protected override void FillBindingNames(IMvxBindingNameRegistry registry)
    {
        MvxAppCompatSetupHelper.FillDefaultBindingNames(registry);
        base.FillBindingNames(registry);
    }
}


public class MvxAppCompatSetup<TApplication> : MvxAppCompatSetup
    where TApplication : class, IMvxApplication, new()
{
    protected override IMvxApplication CreateApp() => Mvx.IoCProvider.IoCConstruct<TApplication>();

    public override IEnumerable<Assembly> GetViewModelAssemblies()
    {
        return new[] { typeof(TApplication).GetTypeInfo().Assembly };
    }
}

1 Ответ

4 голосов
/ 15 октября 2019

Я действительно не могу себе представить, когда можно было бы использовать только MvxAppCompatSetup вместо MvxAppCompatSetup , на мой взгляд, всегда будет TApplication - это приложение, определенное в проекте Core.

Прежде всего, я хотел бы отметить, что MvxAppCompatSetup, который поставляется с общей настройкой TApplication, ожидает класс приложения Xamarin.Forms в качестве параметра, что является правильным. И да, у вас всегда будет TApplication, так как это базовая необходимость установки в Xamarin.Forms.

Когда вы посмотрите на MVVMCross Documentation для начала работы. Вы увидите основное использование MvxAppCompatSetup там, где оно теперь установлено в MainApplication классе здесь .

Теперь дело в том, что вы не можете использовать MvxAppCompatSetup напрямую вообще вваш код, так как это Abstract класс. Теперь причина, по которой он все еще общедоступен, заключается в том, что вы можете сделать это, унаследовав его и создав собственную версию класса установки, которая может иметь ваши собственные настройки, которые вы сами хотите выполнить.

И после просмотра их исходного кодаВы поймете, что они используют этот абстрактный класс в нескольких местах, и, следовательно, он общедоступен. Но вы, как человек, который в порядке с базовой настройкой, никогда не будете использовать эту настройку. так как он все равно не может быть инициализирован, поэтому то, что вы будете использовать, всегда является универсальным.

Мне любопытно: когда имеет смысл использовать неуниверсальную версию MvxAppCompatSetup / почему она существует?

Единственная причина, по которой неуниверсальная версия является общедоступной, заключается в том, что она позволяет разработчику создавать собственную версию установки и, следовательно, сохранять ее абстрактной, чтобы в противном случае ее нельзя было использовать. и та же причина, по которой универсальная версия не является абстрактной, заключается в том, что кто-то, кто в порядке с базовой настройкой, может использовать ее

Удачи.

Не стесняйтесь вернуться, если у васвопросы или запросы.

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