gpt4 book ai didi

asp.net-mvc-3 - Ninject 到一个 Webactivator 调用的类中

转载 作者:行者123 更新时间:2023-12-04 06:09:49 24 4
gpt4 key购买 nike

我使用 nuget 模板方式 ninjectning 我的 MVC3 应用程序,
这意味着我已经使用 WebActivator 来调用静态类上的方法,该方法反过来创建 Ninject Bootstrap 并连接到 MVC3。

这适用于 Controller 、适配器等。但我想要另一个 Webactivator 激活类,它使用 Ninject 获取其依赖项。

我让它与一个糟糕的解决方案一起工作,但我更喜欢一个更优雅的解决方案。

首先,我确保我的 Webactivator 类使用 PostApplicationStartMethod 调用,因为 Ninject 模块使用 PreApplicationStartMethod 我可以确保 ninject 已加载并准备就绪。然后在 Start 方法中我做

var workers = DependencyResolver.Current.GetServices<IWorker>();

为了获得我的依赖,整个类看起来像这样
[assembly: WebActivator.PostApplicationStartMethod(typeof(SHB.DALA.Web.App_Start.WorkflowRunner), "Start")]

namespace SHB.DALA.Web.App_Start
{
public static class WorkflowRunner
{
public static void Start()
{
var workers = DependencyResolver.Current.GetServices<IWorker>();
//Do stuff with worker collection
}
}
}

一定有更优雅的解决方案吧?

最佳答案

WebActivator(实际上是 ASP.NET)对 Ninject 项目一无所知,因此无法注入(inject)任何参数。你需要一个 Ninject WebActivator 扩展(就像你拥有一个 Ninject MVC 扩展一样)来实现它。但坦率地说,这有点像第 22 条问题:您希望 WebActivator 设置 Ninject,同时 Ninject 设置 WebActivator。

我可以为您想到两种可能的情况:

  • 保留代码原样 - 老实说,我不知道你为什么不喜欢你的 WorkflowRunner类(class)。这是一个不错的小类,没有其他代码对它有任何依赖,您可以通过 DependencyResolver 获取引用。它将您从 Ninject 本身抽象出来,您的工作流程初始化很好地封装在那里。我在这里没有闻到任何不对劲,真的。
  • 在设置 Ninject 的其他 WebActivator 类中初始化您的工作流。您知道您的 Ninject 已初始化,您仍然可以将工作流初始化代码保存在单独的类中。

  • 如果我是你,我显然会选择 1。

    关于asp.net-mvc-3 - Ninject 到一个 Webactivator 调用的类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7902925/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com