System.ArgumentException: не найдено данных, совпадающих с членами - Unity IOC - PullRequest
1 голос
/ 16 октября 2019

Я получаю исключение в своем приложении при выполнении в строке

public static void Initialize(Context applicationContext, IUnityContainer diContainer)
{
    diContainer.RegisterType<IAndroidGlobals, AndroidGlobals>(new ContainerControlledLifetimeManager(), new InjectionConstructor(applicationContext));
}

Это класс AndroidGlobls

public class AndroidGlobals : IAndroidGlobals
{

    public string ApplicationVersion(string appName)
    {
        return  ApplicationContext.PackageManager.GetPackageInfo(appName, 0).VersionName;
    }
    public Android.Content.Context ApplicationContext
    {
        get { return _applicationContext; }
    }

    private readonly Context _applicationContext;

    public AndroidGlobals(Context applicationContext)
    {
        _applicationContext = applicationContext;
    }
}

Ниже приведено исключение. Как я могу решить эту проблему

{System.InvalidOperationException: не найдено данных, соответствующих данным участника. Ошибка в: RegisterType (время жизни: PerContainer, Invoke.Constructor (dispatch.droid.mainactivity@77cb316)) ---> System.ArgumentException: не найдено данных, соответствующих элементу. в Unity.Injection.InjectionConstructor.SelectMember (тип System.Type, Unity.Injection.InjectionMember _) [0x0003c] в C: \ projects \ abstractions \ src \ Dependency \ Injection \ Members \ InjectionConstructor.cs: 48 в Unity.Injection. InjectionMember`2 [TMemberInfo, TData] .AddPolicies [TContext, TPolicySet] (System.Type registerType, System.Type mappedToType, имя System.String, TPolicySet & policy) [0x00023] в C: \ projects \ abstractions \ src \ Dependency\ Abstracts \ InjectionMember.cs: 133 в Unity.UnityContainer.Unity.IUnityContainer.RegisterType (System.Type typeFrom, System.Type typeTo, имя System.String, Unity.Lifetime.ITypeLifetimeManager lifeManager, Unity.InmberMectionMence) Injection[0x00144] в C: \ projects \ container \ src \ UnityContainer.IUnityContainer.cs: 66 --- Конец трассировки стека внутренней исключительной ситуации --- в Unity.UnityContainer.Unity.IUnityContainer.RegisterType (System.Type typeFrom, System. Тип typeTo, имя System.String, Unity.Lifetime.ITypeLifetimeManager lifeManager, Unity.Injection.InjectionMember []jectionMembers) [0x002de] в C: \ projects \ container \ src \ UnityContainer.IUnityContainer.cs: 97 в Unity.UnityContainerExtensions.RegisterType [TFrom, TTo] (Unity.IUnityContainer. контейнерLifetime.ITypeLifetimeManager lifeManager, Unity.Injection.InjectionMember []jectionMembers) [0x00000] в C: \ projects \ abstractions \ src \ Extensions \ Container \ UnityContainer.cs: 132 в Ex.Express.Mobile.Core.Shared.Initializer.Initialize(Android.Content.Context applicationContext, Unity.IUnityContainer diContainer) [0x00012] в D: \ ExNew \ SmartPad \ DEV \ Ex.Express.Mobile \ SmartPad \ Components \ Core \ Core.Shared \ Initializer.cs: 72 в Ex. Express.Mobile.Core.Droid.Initializer.Initialize (Android.Content.Context applicationContext, Unity.IUnityContainer diContainer) [0x00001] в D: \ ExNew \ SmartPad \ DEV \ Ex.Express.Mobile \ SmartPad \ Components \ Core \ Core.Droid \ Initializer.cs: 22 в Ex.Express.Mobile.Apps.DispatchApp.Droid.MainActivity.OnCreate (комплект Android.OS.Bundle) [0x00034] в D: \ ExNew \ SmartPad \ DEV \ Ex.Express.Mobile \ SmartPad \ Apps \ Messages \ DispatchApp.Droid \ MainActivity.cs: 121}

Я использую Sdk and User Assembly влинкер. Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 18 октября 2019

Эта проблема была решена с помощью атрибута [Android.Runtime.Preserve(AllMembers = true)] вверху всех используемых классов.

...