c# - 使用 Ninject 进行深度大于 1 的上下文/条件依赖注入(inject)?

标签 c# asp.net-mvc dependency-injection ninject ninject-2

我有一个由 InMemoryDataContextMyApplicationDataContext 实现的 IDataContext 接口(interface)。这是由我的所有定义为 BananaRepository : IBananaRepository 的存储库消耗的,并在其构造函数中获取数据上下文:

interface IDataContext {}
class InMemoryDataContext : IDataContext {}
class MyApplicationDataContext : IDataContext {}

interface IBananaRepository {}
class BananaRepository : IBananaRepository 
{
    public BananaRepository(IDataContext dataContext) {}
}

到目前为止,我的接口(interface)和服务的使用者是 ASP.NET MVC Controller 、同步命令和查询。 NInject 在我的 Web 项目中配置,并且使用 InRequestScope()IDataContext 绑定(bind)到 MyApplicationDataContext

 kernel.Bind<IDataContext>().To<MyApplicationDataContext>().InRequestScope();
 kernel.Bind<IBananaRepository>().To<BananaRepository>();

我的项目已经发展到了这样的阶段,我想开始添加异步处理(命令、事件+处理程序等)。我面临的问题是,对于那些我需要获得 transient IDataContext (每次都是新的)的人,但已经为每个请求的 IDataContext 实例设置了绑定(bind)对于我的 Controller 。

考虑这个简单的场景,我的 DoSomethingAsyncCommand 将在新线程上执行:

class DoSomethingAsyncCommand : IAsyncCommand<TArgs>
{
    public DoSomethingAsyncCommand(IBananaRepository repository) {}

    public bool Execute(TArgs args) {}
}

我希望当 NInject 实例化 IAsyncCommand 的类实现时,IBananaRepository(以及我所有其他存储库)使用 IDataContext 的新实例进行初始化code> 而不是用于重用 Web 请求的请求(实际上,我希望将 IAsyncCommand 我的 IDataContext 绑定(bind)为 InTransientScope())

我怎样才能做到这一点?

P.S:我直接使用 CommonServiceLocator 而不是 Ninject 内核来实例化 IAsyncCommand 实例。

最佳答案

查看https://github.com/ninject/ninject/blob/master/src/Ninject/Planning/Bindings/BindingConfigurationBuilder.cs

在那里您可以找到 IsAnyAnchestorNamed。您可以使用相同的循环,并将其与 WhenInjectedInto 中找到的条件结合起来,然后从 custom When 调用它。 .

关于c# - 使用 Ninject 进行深度大于 1 的上下文/条件依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10225288/

相关文章:

c# - 如何限制 foreach 循环 n 次运行?

c# - "Non-nullable field is uninitialized"的编译器错误,即使已在InitializeComponents函数中对其进行了初始化

c# - 如何缓存数据库表以防止在 Asp.net C# mvc 中进行许多数据库查询

android - 添加 AndroidInjector 时 Dagger 缺少绑定(bind)

c# - 使用 ASP.Net 5 进行 JwtBearer 身份验证

c# - 将长数相加作为学习练习

asp.net-mvc - 尝试在 Azure 网站的 Web.config 中正确配置 SMTP。无法上类

javascript - ASP.NET + Bootstrap Modal远程页面加载

java - Dagger2 Named(@Named) 多态或不同对象注入(inject)

c# - 如何将 IDictionary 属性与 Ninject 绑定(bind)?