我是一個新的快樂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
我建議嘗試按照我的答案底部的教程,看看是否有助於澄清一些項目。 –