ServiceCollectionExtensions
ServiceCollectionExtensions
提供一系列扩展方法,用于简化在 .NET MAUI IServiceCollection
中注册视图及其关联的 ViewModel。
可以在 CommunityToolkit.Maui
命名空间下查找 ServiceCollectionExtensions
,因此只需添加以下行即可开始使用:
using CommunityToolkit.Maui;
备注:这些扩展方法仅在
IServiceCollection
中注册视图和 ViewModel。 开发人员仍需负责将注入的 ViewModel 实例分配给视图的BindingContext
属性。此外,这些扩展方法假定视图和 ViewModel 之间存在一对一关系,并且两者共享相同的生存期。 开发人员需要恢复为单独注册视图和 ViewModel,以便指定不同的生存期或处理多个视图使用同一 ViewModel 的情况。
注册视图和 ViewModel
以下方法允许在 .NET MAUI IServiceCollection
中注册视图和 ViewModel。
AddScoped<TView、TViewModel>(IServiceCollection)
将 TView 中指定的类型的作用域视图和 TViewModel 类型的 ViewModel 添加到指定的 IServiceCollection。
using CommunityToolkit.Maui;
namespace CommunityToolkit.Maui.Sample;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder()
.UseMauiCommunityToolkit()
.UseMauiApp<App>();
builder.Services.AddScoped<HomePage, HomePageViewModel>();
}
}
类型参数
TView
要添加的视图的类型。 限制为 BindableObject
TViewModel
要添加的 ViewModel 的类型。 仅限于实现 INotifyPropertyChanged
的引用类型
参数
services
IServiceCollection
要将视图和 ViewModel 添加到的 IServiceCollection。
返回
IServiceCollection 操作完成后对此实例的引用。
AddSingleton<TView、TViewModel>(IServiceCollection)
将 TView 中指定的类型的单一实例视图和 TViewModel 类型的 ViewModel 添加到指定的 IServiceCollection。
using CommunityToolkit.Maui;
namespace CommunityToolkit.Maui.Sample;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder()
.UseMauiCommunityToolkit()
.UseMauiApp<App>();
builder.Services.AddSingleton<HomePage, HomePageViewModel>();
}
}
类型参数
TView
要添加的视图的类型。 限制为 BindableObject
TViewModel
要添加的 ViewModel 的类型。 仅限于实现 INotifyPropertyChanged
的引用类型
参数
services
IServiceCollection
要将视图和 ViewModel 添加到的 IServiceCollection。
返回
IServiceCollection 操作完成后对此实例的引用。
AddTransient<TView、TViewModel>(IServiceCollection)
将 TView 中指定的类型的瞬态视图和 TViewModel 类型的 ViewModel 添加到指定的 IServiceCollection。
using CommunityToolkit.Maui;
namespace CommunityToolkit.Maui.Sample;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder()
.UseMauiCommunityToolkit()
.UseMauiApp<App>();
builder.Services.AddTransient<HomePage, HomePageViewModel>();
}
}
类型参数
TView
要添加的视图的类型。 限制为 BindableObject
TViewModel
要添加的 ViewModel 的类型。 仅限于实现 INotifyPropertyChanged
的引用类型
参数
services
IServiceCollection
要将视图和 ViewModel 添加到的 IServiceCollection。
返回
IServiceCollection 操作完成后对此实例的引用。
使用 Shell 路由注册视图和 ViewModel
以下方法允许在 .NET MAUI IServiceCollection
中注册视图和 ViewModel,并在 .NET MAUI Shell 路由中将路由显式注册到视图。
AddScopedWithShellRoute<TView、TViewModel>(services, route, factory)
将 TView 中指定的类型的作用域视图和 TViewModel 类型的 ViewModel 添加到指定的 IServiceCollection,并在路由参数中指定的路由处注册视图以供 Shell 导航使用。 可提供可选的 RouteFactory
来控制视图构造。
using CommunityToolkit.Maui;
namespace CommunityToolkit.Maui.Sample;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder()
.UseMauiCommunityToolkit()
.UseMauiApp<App>();
builder.Services.AddScopedWithShellRoute<HomePage, HomePageViewModel>("HomePage");
}
}
类型参数
TView
要添加的视图的类型。 限制为 NavigableElement
TViewModel
要添加的 ViewModel 的类型。 仅限于实现 INotifyPropertyChanged
的引用类型
参数
services
IServiceCollection
要将视图和 ViewModel 添加到的 IServiceCollection。
route
string
视图可在 .NET MAUI Shell 中导航到的路由。
factory (optional)
RouteFactory
控制视图构造的 RouteFactory
。
返回
IServiceCollection 操作完成后对此实例的引用。
AddSingletonWithShellRoute<TView、TViewModel>(services, route, factory)
将 TView 中指定的类型的单一实例视图和 TViewModel 类型的 ViewModel 添加到指定的 IServiceCollection,并在路由参数中指定的路由处注册视图以供 Shell 导航使用。 可提供可选的 RouteFactory
来控制视图构造。
using CommunityToolkit.Maui;
namespace CommunityToolkit.Maui.Sample;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder()
.UseMauiCommunityToolkit()
.UseMauiApp<App>();
builder.Services.AddSingletonWithShellRoute<HomePage, HomePageViewModel>("HomePage");
}
}
类型参数
TView
要添加的视图的类型。 限制为 NavigableElement
TViewModel
要添加的 ViewModel 的类型。 仅限于实现 INotifyPropertyChanged
的引用类型
参数
services
IServiceCollection
要将视图和 ViewModel 添加到的 IServiceCollection。
route
string
视图可在 .NET MAUI Shell 中导航到的路由。
factory (optional)
RouteFactory
控制视图构造的 RouteFactory
。
返回
IServiceCollection 操作完成后对此实例的引用。
AddTransientWithShellRoute<TView、TViewModel>(services, route, factory)
将 TView 中指定的类型的瞬态视图和 TViewModel 类型的 ViewModel 添加到指定的 IServiceCollection,并在路由参数中指定的路由处注册视图以供 Shell 导航使用。 可提供可选的 RouteFactory
来控制视图构造。
using CommunityToolkit.Maui;
namespace CommunityToolkit.Maui.Sample;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder()
.UseMauiCommunityToolkit()
.UseMauiApp<App>();
builder.Services.AddTransientWithShellRoute<HomePage, HomePageViewModel>("HomePage");
}
}
类型参数
TView
要添加的视图的类型。 限制为 NavigableElement
TViewModel
要添加的 ViewModel 的类型。 仅限于实现 INotifyPropertyChanged
的引用类型
参数
services
IServiceCollection
要将视图和 ViewModel 添加到的 IServiceCollection。
route
string
视图可在 .NET MAUI Shell 中导航到的路由。
factory (optional)
RouteFactory
控制视图构造的 RouteFactory
。
返回
IServiceCollection 操作完成后对此实例的引用。
注册弹出窗口视图和视图模型
以下方法允许在 .NET MAUI IServiceCollection
中注册基于弹出窗口的视图和 ViewModel。
AddTransientPopup<TPopupView、TPopupViewModel>(IServiceCollection)
将 TPopupView 中指定的类型的瞬态视图和 TPopupViewModel 类型的 ViewModel 添加到指定的 IServiceCollection 中。
using CommunityToolkit.Maui;
namespace CommunityToolkit.Maui.Sample;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder()
.UseMauiCommunityToolkit()
.UseMauiApp<App>();
builder.Services.AddTransientPopup<UpdatingPopup, UpdatingPopupViewModel>();
}
}
类型参数
TView
要添加的视图的类型。 限制为 Popup
TViewModel
要添加的 ViewModel 的类型。 仅限于实现 INotifyPropertyChanged
的引用类型
参数
services
IServiceCollection
要将视图和 ViewModel 添加到的 IServiceCollection。
返回
IServiceCollection 操作完成后对此实例的引用。
API
可以在 .NET MAUI 社区工具包 GitHub 存储库查看ServiceCollectionExtensions
的源代码