【发布时间】:2019-10-06 10:14:18
【问题描述】:
我正在尝试将用于 MS DI 的 DryIoc 适配器添加到 Xamarin.Forms 共享库(.net 标准类库),但我还不能。
当我运行项目时出现此错误
05-20 11:49:29.528 D/ (3402): HostConnection::get() 新主机 连接建立 0xda77ac90,tid 3402 05-20 11:49:29.533 D/Atlas (3402):验证地图...未处理的异常:
System.NullReferenceException:对象引用未设置为实例 一个对象。
05-20 11:50:18.777 D/Mono (3402): DllImport 试图加载: '/system/lib/liblog.so'。 05-20 11:50:18.777 D/单声道(3402): DllImport 加载库 '/system/lib/liblog.so'。 05-20 11:50:18.777 D/Mono(3402):DllImport 搜索:'/system/lib/liblog.so' ('/system/lib/liblog.so')。 05-20 11:50:18.777 D/单声道(3402): 正在搜索“__android_log_print”。 05-20 11:50:18.777 D/单声道 ( 3402):探测“__android_log_print”。 05-20 11:50:18.777 D/单声道 ( 3402):发现为“__android_log_print”。未处理的异常:
System.NullReferenceException:对象引用未设置为实例 一个对象。
05-20 11:50:18.790 I/MonoDroid(3402):未处理的异常:05-20 11:50:18.791 I/MonoDroid(3402):System.NullReferenceException:对象 引用未设置为对象的实例。 05-20 11:50:18.791 I/MonoDroid(3402):在 Prism.Common.PageUtilities.GetCurrentPage (Xamarin.Forms.Page mainPage) [0x00002] 在 D:\a\1\s\Source\Xamarin\Prism.Forms\Common\PageUtilities.cs:212 05-20 11:50:18.791 I/MonoDroid(3402):在 Prism.PrismApplicationBase.OnSleep () [0x00000] 在 D:\a\1\s\Source\Xamarin\Prism.Forms\PrismApplicationBase.cs:193 05-20 11:50:18.791 I/MonoDroid(3402):在 Xamarin.Forms.Application.SendSleep () [0x00000] 在 D:\a\1\s\Xamarin.Forms.Core\Application.cs:297 05-20 11:50:18.791 I/MonoDroid(3402):在 Xamarin.Forms.Platform.Android.FormsAppCompatActivity.OnStateChanged () [0x00057] 在 D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\FormsAppCompatActivity.cs:345 05-20 11:50:18.791 I/MonoDroid(3402):在 Xamarin.Forms.Platform.Android.FormsAppCompatActivity.OnStop () [0x00019] 在 D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\FormsAppCompatActivity.cs:293 05-20 11:50:18.791 I/MonoDroid(3402):在 Android.App.Activity.n_OnStop (System.IntPtr jnienv, System.IntPtr native__this) [0x00009] 在 :0 05-20 11:50:18.791 I/MonoDroid(3402):在(包装动态方法) Android.Runtime.DynamicMethodNameCounter.15(intptr,intptr) 05-20 11:50:18.806 W/art (3402): JNI RegisterNativeMethods: 尝试 为 android.runtime.JavaProxyThrowable 注册 0 个原生方法
如果我从 MainPageViewModel 的构造函数中删除 IUserSocialService 可以正常工作。不知道为什么不注入IUserSocialService的实现。
服务层
public static IServiceCollection Init()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton<IUserSocialService, UserSocialService>();
return serviceCollection;
}
Xamarin.Forms(共享网络标准类库)
protected override IContainerExtension CreateContainerExtension()
{
var containerExtension = (DryIocContainerExtension)base.CreateContainerExtension();
containerExtension.Instance.Populate(ServicesLayer.Init());
return containerExtension;
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<NavigationPage>();
containerRegistry.RegisterForNavigation<MainPage, MainPageViewModel>();
}
MainPageViewModel
private readonly IUserSocialService userSocialService;
public MainPageViewModel(INavigationService navigationService, IUserSocialService userSocialService) : base(navigationService)
{
Title = "Main Page";
this.userSocialService = userSocialService;
}
软件包版本:
服务层:
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.2.0" />
Xamarin.Forms(共享网络标准类库)
<PackageReference Include="DryIoc.Microsoft.DependencyInjection" Version="2.1.0" />
<PackageReference Include="Prism.DryIoc.Forms" Version="7.1.0.431" />
提前致谢!
【问题讨论】:
-
NRE 消息在没有堆栈跟踪的情况下没有用。可以加吗?
-
@dadhi 我编辑我的答案
标签: c# xamarin.forms dependency-injection prism dryioc