我的 ASP .NET MVC 应用程序中有一个奇怪的问题。我有一些控制器和一些控制器IHelper
,它是Helper
这个控制器的实现。当我像下面这样使用这个助手时:
public ActionResult SomeAction()
{
var hepler = new Helper();
helper.DoStuff();
...
}
一切都好。但是当我尝试将此帮助器作为控制器的属性注入时:
public IHelper Helper { private get; set; }
...
public ActionResult SomeAction()
{
Helper.DoStuff();
...
}
在我的 IoC 配置类中,我有:
ObjectFactory.Initialize(x =>
{
// Helpers
x.For<IHelper>().Use<Helper>();
...
x.FillAllPropertiesOfType<IHelper>().Use<Helper>();
...
}
问题是我在 IoC 配置类中使用 IoC 模式初始化了许多不同的助手、管理器、存储库和其他东西,并成功地注入到我的每个控制器中。但是当我尝试注入这个时Helper
,我得到:
InvalidOperationException: An error occurred when trying to create a controller of type 'MyController'. Make sure that the controller has a parameterless public constructor.
我知道问题出在 IoC 中,Helper
因为我用 google 搜索了这个,Helper
从 IoC 配置类中删除,像使用它一样var hepler = new Helper();
,一切正常。但我不明白问题出在哪里?以前有人见过这样的问题吗?我什至无法理解如何确保控制器具有无参数的公共构造函数,并且当一切都适用于另一个助手等时,控制器属性之一的 IoC 初始化可以相关联。
编辑
_ 我正在使用 StructureMap IoC 框架和 ASP .NET MVC 4.0。