gpt4 book ai didi

dependency-injection - 带有 NullReferenceException 的 Xamarin 跨平台中的 Ninject 实现

转载 作者:行者123 更新时间:2023-12-04 08:20:39 25 4
gpt4 key购买 nike

我是一个新的快乐 Xamarin 开发人员,不幸的是我陷入了我的第一个项目问题。当我使用 MVC 时,我曾经使用过 Ninject。所以,我决定在 Xamarin 项目中也使用这个工具作为我的 IoC 和 DI。我的解决方案包含用于共享数据的 IOS 项目、Android 项目和 PCL。
在我的 PCL 项目中,我创建了我的 NinjectModule(到目前为止非常简单的实现..:))

public class NinjectModuleImplementation : NinjectModule
{
public override void Load()
{
this.Bind<IMapPoint>().To<MapPoint>();
}
}

我创建容器的另一个静态类:
public static class Startup
{
public static StandardKernel Container { get; set; }

public static void BuildContainer()
{
var kernel = new Ninject.StandardKernel(new NinjectModuleImplementation());
Startup.Container = kernel;
}
}

在我的原生项目中,我调用 Startup.BuildContainer();

安卓:
[Application]
public class App : Application
{
public App(IntPtr h, JniHandleOwnership jho) : base(h, jho)
{
}

public override void OnCreate()
{
Startup.BuildContainer();
}
}

和 iOS
[Register ("AppDelegate")]
public class AppDelegate : UIApplicationDelegate
{
public override UIWindow Window {
get;
set;
}

public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
{
Startup.BuildContainer();
return true;
}

现在,当我尝试“显式”解决我的依赖项时,没有问题 - 它可以工作。
IMapPoint point = Startup.Container.Get<IMapPoint>();

但是,当我尝试通过构造函数注入(inject)我的依赖项时 - 就像这样:
public class SomeClass
{
public static SomeClass Instance { get; private set; }
public IMapPoint point;

public SomeClass(IMapPoint _point)
{
Instance = this;
point = _point;
}
}

NullReferenceException 被抛出......我做错了什么?
我将不胜感激任何建议:)

问候,

马吕什

最佳答案

每个平台都有一个模块吗?

应用程序.cs

[Application(Theme = "@style/Base.Theme", Icon = "@mipmap/ic_launcher")]
public class ConquerApplication : Application
{
public static IKernel Container { get; set; }

public ConquerApplication(IntPtr handle, JniHandleOwnership ownerShip)
: base(handle, ownerShip)
{
}

public override void OnCreate()
{
var kernel = new Ninject.StandardKernel(new ConquerModule());

Container = kernel;

base.OnCreate();
}
}

安卓模块
public class ConquerModule : NinjectModule
{
public override void Load()
{
//Bind<IThing>().To<Thing>();
this.Bind<ISQLite>().To<AndroidSQLite>();
this.Bind<IPersonRepository>().To<PersonRepository>();
this.Bind<ICycleRepository>().To<CycleRepository>();
this.Bind<IConquerDatabase>().To<ConquerDatabase>();
this.Bind<IntroViewModel>().ToSelf().InSingletonScope();
}
}

您可以在此处查看一个相当简单的示例:
https://github.com/RobGibbens/Xamarin.IoC/tree/master/NinjectDemo

关于dependency-injection - 带有 NullReferenceException 的 Xamarin 跨平台中的 Ninject 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36343718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com