Xamarin表单应用程序在创建StandardKernel时抛出一个null异常

时间:2018-01-23 16:07:07

标签: android xamarin.forms ninject

我使用VS2017创建了一个跨平台的应用程序(Xamarin Forms),模板设置为Blank App,Platform Android,UI Tech Xamarin.Forms,Code Sharing .NET Standard。所有构建和运行并显示“欢迎来到Xamarin Froms”。

我将Portable.Ninject包添加到.NET标准PCL项目和Android项目中。 创建了以下Test类和接口

public class Test : ITest
    {
        public string name { get; set; }
    }



public interface ITest
    {
        string name { get; set; }
    }

NinjectModule类

   public class modules : NinjectModule
{
    public override void Load()
    {
        Bind<ITest>().To<Test>();
    }
}

并在类App:Application和在构造函数中添加内核创建

public App ()
        {

            InitializeComponent();

            var settings = new NinjectSettings();
            settings.LoadExtensions = false;

            var mods = new modules();
            var kernel = new StandardKernel(mods);

            var test = kernel.Get<ITest>();

            MainPage = new App12.MainPage();
        }

运行ArgumentNULLException时。参数名称:path1出现在新的StanardKernel(新模块())。

任何帮助将不胜感激。我试过Ninject Nuget包,在android项目MainActivity中创建StandardKernel:Oncreate,删除包,bin和obj文件夹...都具有相同的结果

添加: - 分隔模块类的实例化,以下是监视窗口。绑定列表的计数不应该为1吗?

-       mods    {App12.modules} App12.modules
-       base    {Ninject.Modules.NinjectModule} Ninject.Modules.NinjectModule
+       base    {Ninject.Syntax.BindingRoot}    Ninject.Syntax.BindingRoot
+       Bindings    Count = 0   System.Collections.Generic.List<Ninject.Planning.Bindings.IBinding>
        Kernel  (null)  Ninject.IKernel
        Name    "App12.modules" string
+       Non-public members      

1 个答案:

答案 0 :(得分:0)

您应该将LoadExtensions设置为false的NinjaSettings对象添加到StandardKernel构造函数。

public App()
    {
        InitializeComponent();

        var settings = new NinjectSettings(); 
        settings.LoadExtensions = false;
        var kernel = new StandardKernel(settings, new modules());
        var test = kernel.Get<ITest>();

        MainPage = new App12.MainPage();
    }