什么时候会使用非通用版本的 MvxAppCompatSetup<T>?
When would one use the non-generic version of MvxAppCompatSetup<T>?
在 MvvmCross 中有 MvxAppCompatSetup
和 MvxAppCompatSetup<TApplication>
(实际上派生自 MvxAppCompatSetup
)。两者都在 MvxAppCompatSetup.cs 文件中实现。
我真的无法想象什么时候只使用 MvxAppCompatSetup
而不是 MvxAppCompatSetup<TApplication>
就我的理解而言,人们总是会使用 TApplication
- 实际上是 App
在 Core 项目中定义。
不过我很好奇:什么时候使用非通用版本 MvxAppCompatSetup
有意义/为什么它在那里?
MvxAppCompatSetup.cs 文件中通用和非通用版本的代码:
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 };
}
}
I really can't imagine when one would use only MvxAppCompatSetup instead of MvxAppCompatSetup<TApplication> as to my understanding one would always have the TApplication - that's actually the App that's defined in the Core project.
首先,我想指出 TApplication
通用设置附带的 MvxAppCompatSetup
需要 Xamarin.Forms
应用程序 class 作为参数,哪个是正确的。是的,您将始终拥有 TApplication,因为它是 Xamarin.Forms
.
中的基本设置必需品
当您查看 MVVMCross Documentation for getting started. You will see the basic usage of the MvxAppCompatSetup
where it is now set in the MainApplication
class here.
现在的问题是您根本不能在代码中直接使用 MvxAppCompatSetup
,因为它是一个 Abstract
class。现在它仍然是 public 的原因是你可以从它继承并创建你自己的设置版本 class,它可以有你自己想要执行的设置。
在查看他们的源代码后,您会了解到他们在多个地方使用了这个抽象 class,因此它是 public。但是你作为一个对基本设置很好的人永远不会真正使用这个设置。因为它无论如何都无法初始化,所以您将使用的始终是通用的。
I am curious though: When would using the non-generic version MvxAppCompatSetup make sense / why is it there?
非通用版本可用的唯一原因 publically 是让开发人员创建自己的设置版本,因此保持抽象,否则无法使用。和通用版本不抽象的相同原因是,对基本设置没问题的人可以使用它
祝你好运。
如果您有任何问题或疑问,请随时回来。
在 MvvmCross 中有 MvxAppCompatSetup
和 MvxAppCompatSetup<TApplication>
(实际上派生自 MvxAppCompatSetup
)。两者都在 MvxAppCompatSetup.cs 文件中实现。
我真的无法想象什么时候只使用 MvxAppCompatSetup
而不是 MvxAppCompatSetup<TApplication>
就我的理解而言,人们总是会使用 TApplication
- 实际上是 App
在 Core 项目中定义。
不过我很好奇:什么时候使用非通用版本 MvxAppCompatSetup
有意义/为什么它在那里?
MvxAppCompatSetup.cs 文件中通用和非通用版本的代码:
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 };
}
}
I really can't imagine when one would use only MvxAppCompatSetup instead of MvxAppCompatSetup<TApplication> as to my understanding one would always have the TApplication - that's actually the App that's defined in the Core project.
首先,我想指出 TApplication
通用设置附带的 MvxAppCompatSetup
需要 Xamarin.Forms
应用程序 class 作为参数,哪个是正确的。是的,您将始终拥有 TApplication,因为它是 Xamarin.Forms
.
当您查看 MVVMCross Documentation for getting started. You will see the basic usage of the MvxAppCompatSetup
where it is now set in the MainApplication
class here.
现在的问题是您根本不能在代码中直接使用 MvxAppCompatSetup
,因为它是一个 Abstract
class。现在它仍然是 public 的原因是你可以从它继承并创建你自己的设置版本 class,它可以有你自己想要执行的设置。
在查看他们的源代码后,您会了解到他们在多个地方使用了这个抽象 class,因此它是 public。但是你作为一个对基本设置很好的人永远不会真正使用这个设置。因为它无论如何都无法初始化,所以您将使用的始终是通用的。
I am curious though: When would using the non-generic version MvxAppCompatSetup make sense / why is it there?
非通用版本可用的唯一原因 publically 是让开发人员创建自己的设置版本,因此保持抽象,否则无法使用。和通用版本不抽象的相同原因是,对基本设置没问题的人可以使用它
祝你好运。
如果您有任何问题或疑问,请随时回来。