我正在实现一个 dotnet Maui 应用程序,当我需要某些方面来处理错误和某些响应时。 过去,我使用温莎城堡实现了拦截器,但是在毛伊岛如何实现呢?
开发环境为Visual Studio 2022 v17.6.2 毛伊岛版本:
Installed Workload Id Manifest Version Installation Source
---------------------------------------------------------------------
maui-ios 7.0.86/7.0.100 VS 17.6.33723.286
android 33.0.46/7.0.100 VS 17.6.33723.286
maui-windows 7.0.86/7.0.100 VS 17.6.33723.286
maui-maccatalyst 7.0.86/7.0.100 VS 17.6.33723.286
maccatalyst 16.4.7054/7.0.100 VS 17.6.33723.286
ios 16.4.7054/7.0.100 VS 17.6.33723.286
maui-android 7.0.86/7.0.100 VS 17.6.33723.286
目标框架:net7
问题是内置的 DI 解析器不支持拦截器(除非我错过了一些东西)。
我就是这样做的。
选择 DI 提供商
内置的Dotnet不支持拦截器。 尝试过温莎城堡,但 nuget 包添加了一个可怕的依赖项列表,因此寻找其他东西。 然后是 Autofac,依赖项列表更加友好(尽管尚未实际检查已部署应用程序中的附加二进制文件大小)。 决定使用 Autofac。
步骤
https://stackoverflow.com/questions/73604106/how-to-use-autofac-with-net-maui
)public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts => { ... })
.ConfigureContainer(new AutofacServiceProviderFactory(), autofacBuilder => {
// Registrations
// Don't call the autofacBuilder.Build() here - it is called behind
// the scenes
autofacBuilder.RegisterType<Logic>().As<ILogic>() // where Logic is the type to add the aspect to
.EnableClassInterceptors()
.InterceptedBy(typeof(LoggingAspect)); // LoggingAspect is the interceptor to implement logging
autofacBuilder.RegisterType<MainPage>(); // See step below, had to add DI registration for the Maui MainPage
autofacBuilder.RegisterType<LoggingAspect>();
});
添加了一个方面(请参阅https://levelup.gitconnected.com/embracing-aspect-oriented-programming-in-net-2640f9ace519)
此时我面临着拦截同步和异步方法,并且记得这并不容易。幸运的是,我之前有自己的库,添加了 nuget 包 BaseInterceptors 并基于示例 2 实现了日志记录方面:https://www.nuget.org/packages/BaseInterceptors