我是一个新的快乐Xamarin开发人员,不幸的是我卡住了我的第一个项目问题。当我使用MVC时,我曾经与Ninject一起工作。所以,我决定在Xamarin项目中使用这个工具作为我的IoC和DI。我的解决方案包含IOS项目,Android项目和PCL共享数据。 在我的PCL项目我创建了NinjectModule(非常简单的实现迄今.. :))Xamarin跨平台Ninject实现与NullReferenceException
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>();
然而,当我试图通过构造函数注入我的依赖 - 这样的:
public class SomeClass
{
public static SomeClass Instance { get; private set; }
public IMapPoint point;
public SomeClass(IMapPoint _point)
{
Instance = this;
point = _point;
}
}
引发NullReferenceException ......我在做什么错? 我会很感激的任何建议:)
问候,
的Mariusz
您好乔恩。我的模块存储在PCL项目中。但是,我通过静态Startup类和prop Container从本地项目到Module的引用。我认为可以在PCL中创建一个模块...我是对的吗?否则,如果我将模块放到本地项目中,如何在PCL中使用IoC容器? PCL没有参考iOS/Android .. – Mariusz
我建议尝试按照我的答案底部的教程,看看是否有助于澄清一些项目。 –