Ninject:将依赖IntPtr注入构造函数的参数方法

时间:2015-01-01 01:20:36

标签: c# ninject

我早些时候得到了这个问题的帮助:

Ninject: Error Activating Strings

@nemensv解决了那个,但是我立即获得了一个关于IntPtr的新例外。 (参见下面的激活路径)。

浏览ctor here

只有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));

1 个答案:

答案 0 :(得分:0)

由于ninject声明它无法创建BlobSerializerDelegate,因为它不知道如何实现BlobSerializerDelegate+SerializeDelegate。您需要告诉ninject如何创建BlobSerializerDelegate - 如果这是必要的 - 或告诉它如何实现SQLiteConnection。 我认为对于给定的情况,ToMethod绑定最好:

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

ToMethod操作应该只是new SQLiteConnection,就像没有DI容器一样。