- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前面临对象异步初始化的问题 (this question)。我正在使用 Ninject 3.0.1.10,我想实现以下目标:
Kernel.Bind<IServiceProvider>().ToMethod(async ctx => await ServiceProvider.CreateAsync())
现在这个东西无法编译,因为异步 lambda 表达式返回一个 Task<ServiceProvider>
, 不是 ServiceProvider
.有什么办法可以在 Ninject 中异步初始化对象吗?也许有一些解决方法?
最佳答案
根据您的要求,我发布了一个使用 ninject 的解决方案。我稍微偏离了你的目标,因为构造函数没有执行初始化,而是一个方法。该方法由拦截器调用。Async-Ctor 最有可能通过更改为“没有目标的接口(interface)代理”(参见 http://docs.castleproject.org/Tools.Kinds-of-proxy-objects.ashx )并让拦截器实例化对象来实现。
我还想说,我相信异步初始化可能带来的弊大于利。例如,将很难处理初始化异常,因为对接口(interface)的任何调用都可能导致初始化异常。
IFoo
绑定(bind)到 InterceptingProxyProvider : IProvider
。提供者实例化Foo
,Foo
的所有拦截器,然后创建并返回一个城堡动态代理(Proxy
)。这是 Caller
在注入(inject) IFoo
时收到的内容。AsyncInitializationInterceptor
在其构造函数中开始初始化 Foo
。在第一个被拦截的调用上,它等待初始化完成,然后继续。如果初始化因异常而失败,所有对 IFoo
的进一步访问都将导致抛出初始化异常。
进一步说明,ninject 代理扩展为每个目标类型创建一个拦截器实例。然而,我们想要的是每个目标实例一个拦截器实例。这就是为什么我提供了代理和拦截器的绑定(bind)和实例化的自定义实现。
这是代码,完整的集成测试应该向您展示如何使用它:
关于c# - 我可以使用 ToMethod 将异步方法用于 Ninject 绑定(bind)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15923944/
我注意到 Function.prototype 在实验性 JavaScript 中有一个 toMethod() 方法,但它实际上做了什么?我该如何使用它? 最佳答案 更新:toMethod 方法只是实
Unity 中是否有等效的 Ninject 工厂方法?我正在寻找以下示例的统一等价物: Bind().ToMethod(context => new Sword()); 最佳答案 是的,Injecti
如何配置 Ninject 来解决 null用我的构造函数注入(inject)?我正在使用 ToMethod使用工厂方法和 InTransientScope .我厂设计退货null如果某些事情没有得到满
我认为我正在寻找的东西非常简单,但我找不到任何例子。 我想使用 Ninject 通过让 Ninject 调用具有指定参数的工厂方法来创建对象,而不是在实际请求实例化对象期间注入(inject): 在此
我目前面临对象异步初始化的问题 (this question)。我正在使用 Ninject 3.0.1.10,我想实现以下目标: Kernel.Bind().ToMethod(async ctx =>
我有一个消息上下文对象,定义为每个传入消息处理都是唯一的: Bind().ToSelf().InUnitOfWorkScope(); 我还注册了一个自定义接口(interface),通过 Ninjec
在 Ninject3 中有一个新的 .ToConstructor feature . 如前所述,它有助于强类型构造函数参数,例如: Bind().ToConstructor( ctorArg
什么是此代码的 Ninject 3 等效项: Bind().ToMethod(ctx => ctx.Kernel.Get() .GetSessionFactory()
我正在尝试在 Unity 中复制以下 Ninject 语法,但运气不佳: Bind().ToMethod(c => HttpContext.Current.User.Identity); 我认为它应该
我正在关注这个 CQS 教程 https://github.com/Code-First/CQS-Sample它使用 Ninject。 我目前正在使用 Unity 并尝试将其转换为: Bind
我是一名优秀的程序员,十分优秀!