Asp.net mvc 3 带控制器默认构造函数的autofac mvc3,需要帮助吗?
我试图模仿使用autofac给出的示例,但我的控制器始终没有出现无参数构造函数丢失错误。我做错了什么?我应该为irepository创建一个modelbinder吗 下面是引导程序的样子。模拟测试人员放在这里,就像在示例中一样,并没有真正反映实际意图。有一个单独的测试项目Asp.net mvc 3 带控制器默认构造函数的autofac mvc3,需要帮助吗?,asp.net-mvc-3,dependency-injection,autofac,Asp.net Mvc 3,Dependency Injection,Autofac,我试图模仿使用autofac给出的示例,但我的控制器始终没有出现无参数构造函数丢失错误。我做错了什么?我应该为irepository创建一个modelbinder吗 下面是引导程序的样子。模拟测试人员放在这里,就像在示例中一样,并没有真正反映实际意图。有一个单独的测试项目 Mock<iproductrepository> mock = new Mock<iproductrepository>(); mock.Setup(m => m.products).Return
Mock<iproductrepository> mock = new Mock<iproductrepository>();
mock.Setup(m => m.products).Returns(new List<product>()
{
new product() {name = "football", price = 25},
new product() {name = "surf board",price = 179},
new product() {name = "running shoes", price = 95}
}.AsQueryable()
);
builder.RegisterInstance(mock.Object).As<iproductrepository>();
builder.RegisterModelBinders(Assembly.GetExecutingAssembly());
builder.RegisterControllers(Assembly.GetExecutingAssembly());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
这是一个简单的控制器
public class productcontroller : Controller
{
private readonly iproductrepository _productrepository;
/// <summary>
///
/// </summary>
/// <param name="productrepository"></param>
public productcontroller(iproductrepository productrepository)
{
_productrepository = productrepository;
}
//
// GET: /product.controller/
public ViewResult list()
{
return View(_productrepository.products);
}
}
获取此错误
没有为此对象定义无参数构造函数。描述:安
执行当前网站时发生未处理的异常
要求请查看堆栈跟踪以了解有关堆栈的更多信息
错误及其在代码中的起源。例外情况详情:
System.MissingMethodException:未定义无参数构造函数
对于这个对象。源错误:生成了未处理的异常
在执行当前web请求期间。关于
可以使用
下面是异常堆栈跟踪。堆栈跟踪:[MissingMethodException:否
为此对象定义的无参数构造函数。]
System.RuntimeTypeHandle.CreateInstanceRuntimeType类型,布尔值
publicOnly、Boolean noCheck、Boolean&canBeCached、,
RuntimeMethodHandleInternal&ctor、Boolean&bNeedSecurityCheck+0
System.RuntimeType.CreateInstanceSlowBoolean publicOnly,布尔型
skipCheckThis,布尔填充缓存+98
System.RuntimeType.CreateInstanceDefaultTorBoolean publicOnly,
布尔skipVisibilityChecks,布尔skipCheckThis,布尔
fillCache+241 System.Activator.CreateInstanceType类型,布尔值
非公开+69
System.Web.Mvc.DefaultControllerActivator.CreateRequestContext
requestContext,类型控制器Type+67[无效操作异常:
尝试创建类型为的控制器时出错
“*.productcontroller”。请确保控制器具有
method builder.RegisterControllers中的Autofac注册以大写字母C结尾的控制器:
...
if (typeof (IController).IsAssignableFrom(t))
return t.Name.EndsWith("Controller");
else
return false;
...
因此,您仍然需要在C productController中根据将控制器重命名为productController,或者在容器中手动注册控制器。方法生成器中的Autofac。RegisterController注册以大写字母C结尾的控制器:
...
if (typeof (IController).IsAssignableFrom(t))
return t.Name.EndsWith("Controller");
else
return false;
...
因此,在C productController中,您需要根据指定的名称将控制器重命名为productController,或者在容器中手动注册控制器。这是一个很好的实例,说明了为什么您应该尽可能遵守标准命名约定。天哪!谢谢bunch。我不知道这些标准会被强制执行.哇,这太令人沮丧了。控制器名称中的拼写错误。这不是命名约定的真正教训,而是忽略大小写的教训。这是一个很好的实践例子,说明了为什么你应该尽可能坚持标准命名约定。天哪!谢谢你。我不知道这些标准会被强制执行。哇,这太令人沮丧了。控制器中的拼写错误oller的名字。这并不是命名惯例的课程,而是忽略大小写的课程。