0

我正在尝试使用 Mvc 的 Web 扩展的 Dynamo IoC,我看到他们在创建自定义 HttpApplication 以从中派生您的 Global.asax 方面做得很好。但是,我似乎遗漏了一些东西。

我想在我的控制器中完成 DI,但我遇到了通常的“控制器必须有一个无参数构造函数”的问题。

这就是我在 global.asax 中所做的(源自DynamoMvcAndWebApiApplication):

protected override void RegisterDependencies(Dynamo.Ioc.IIocContainer container)
{
    container.Register<ILogger, FakeLogger>();
}

然后我的控制器:

public class HomeController : Controller
{
    private readonly ILogger logger;

    public HomeController(ILogger logger)
    {
        this.logger = logger;
    }

    public ActionResult Index()
    {
        logger.Log("test");
        return View();
    }
}

这让我得到“无参数构造函数错误”。我认为 Dynamo 的 Web 扩展已经处理了使 DI 工作所需的一切。

如果我添加一个无参数构造函数,它会被调用,但是我的 ILogger 将为空,并且我将在我的操作方法中获得 NullReferenceException。

我考虑过必须实现一个 ControllerFactory,但我也认为如果它是强制性的,他们会为 MVC 提供它以及所有其他东西,所以我认为我在滥用所提供的东西。

我想知道是否有人知道如何使 DI 在这种情况下工作。谢谢。

4

3 回答 3

1

我最好的猜测是,这是因为您在注册依赖项时没有注册 HomeController。根据你的例子,你没有。

于 2012-10-15T13:30:01.397 回答
0

我同意 MartinF 的观点。如果您希望解决 HomeController 的依赖项,则需要通过从 Dynamo 容器中解析它来实例化它。当然,我没有看到您的解析代码,但我只是猜测这就是发生的事情。我不认为这是“Dynamo 没有与 MVC 完全集成”的问题。根据容器的工作方式,您甚至可能不需要在尝试解析之前向容器显式注册 HomeController,但您确实需要让容器为您解析它,以便它可以满足依赖关系。只是我根据其他容器的使用情况的猜测。

于 2013-03-19T20:41:48.877 回答
-1

经过长时间的挖掘和试验,Dynamo 似乎没有与 MVC 完全集成。我尝试了 Ninject 与 MVC 的集成,它工作正常,开箱即用。

我的猜测是 Dynamo 只是“还没有”,我会在未来继续检查它的更新。

于 2012-12-07T12:29:07.283 回答