【发布时间】:2013-04-10 10:59:17
【问题描述】:
我目前正面临对象异步初始化的问题 (this question)。我正在使用 Ninject 3.0.1.10,我想实现以下目标:
Kernel.Bind<IServiceProvider>().ToMethod(async ctx => await ServiceProvider.CreateAsync())
现在这个东西不能编译,因为异步 lambda 表达式返回一个Task<ServiceProvider>,而不是ServiceProvider。有没有办法在 Ninject 中异步初始化对象?也许有一些解决方法?
【问题讨论】:
-
你试过
Task.Wait(/*...*/)吗? -
那么它将是同步的......但是你是对的,这种异步必须在某个地方表现出来。我猜,Kernel.Get() 那么也应该是异步的。 Ninject 有可能吗?
-
有两种方法可以将注入与 IServiceProvider 的实例化解耦。第一个是:注入 Lazy
。这由 ninject 支持,但意味着 IServiceProvider 消费者知道它。第二个是将 IServiceProvider 绑定到接口的代理,因为对代理的第一次调用必须检索实际实例(或再次在 Lazy 上执行它)。但是请注意,默认情况下 ninject 会为每个类型创建一个代理,而不是每个实例。我有一个解决方法。如果您希望我发布完整的解决方案,请告诉我。 -
@BatteryBackupUnit 是的,请发布您的解决方案。我想,一些解决方法不会有什么坏处,因为这个问题还没有任何答案。
标签: c# windows-phone-8 ninject