2015-01-01 168 views
0

的參數方法我得到了幫助前面這個問題:Ninject:依賴的IntPtr的注入構造

http://stackoverflow.com/questions/27723011/ninject-error-activating-string/27723071?noredirect=1#comment43864067_27723071 

@nemensv解決了一個,但我immediatley得到關於IntPtr的新的異常。 (請參閱下面的激活路徑)。

一直在尋找通過這裏的ctor

https://github.com/oysteinkrog/SQLite.Net-PCL/blob/ecc19e91a94307d4e739c0f08884ff325c4810ae/src/SQLite.Net/SQLiteConnection.cs#L94-L98 

唯一地方的IntPtr顯示了在這一行:

Result r = Platform.SQLiteApi.Open(databasePathAsBytes, out handle, (int)openFlags, IntPtr.Zero); 

我怎樣才能解決這個使用ninject?

完全例外:

Activation path: 

    6) Injection of dependency IntPtr into parameter method of constructor 

    5) Injection of dependency BlobSerializerDelegate+SerializeDelegate into parameter serializeDelegate of constructor 

    4) Injection of dependency IBlobSerializer into parameter serializer of constructor 

    3) Injection of dependency SQLiteConnection into parameter connection of constructor 

    2) Injection of dependency ICarRepository into parameter carRepository of constructor 

    1) Request for MainViewModel 

我在Ninject代碼:

Bind<SQLiteConnection>() 
       .ToSelf() 
       .WithConstructorArgument("databasePath", path); 
      Bind<ISQLitePlatform>().To<SQLitePlatformWinRT>(); 
      Bind<IBlobSerializer>().To<BlobSerializerDelegate>(); 

謝謝!

編輯:

這爲我工作:

Bind<SQLiteConnection>().ToMethod(ctx => new SQLiteConnection(new SQLitePlatformWP8(), path));

回答

0

由於ninject狀態不能創建BlobSerializerDelegate,因爲它不知道如何instanciated BlobSerializerDelegate+SerializeDelegate。你要麼告訴ninject如何創建BlobSerializerDelegate - 如果這甚至是必要的 - 或告訴它如何instanciate SQLiteConnection。 我認爲對於給定的situtation結合ToMethod將是最好的:

Bind<SQLiteConnection>().ToMethod(ctx => new SQLiteConnection(...)); 

ToMethod行動應該只是new的SQLiteConnection,你會沒有一個DI容器。

+0

謝謝你的回答,但我不明白。 New BlobSeriaLizerDelegate的「...」面前是什麼? 到目前爲止,我得到這個: 綁定()。ToMethod(path,「databasepath」, – Wranglerino

+0

ctor的參數只是「僞代碼」。你把那些你想要/定義的參數由'SQLiteConnection'的構造函數完成。 – BatteryBackupUnit