【发布时间】:2011-11-21 12:19:26
【问题描述】:
我试图模仿使用 autofac 给出的示例,但我的控制器不断收到无参数构造函数丢失错误。我做错了什么应该为 irepository 创建一个模型绑定器?
这是引导程序的外观。嘲讽的测试人员放在这里就像在示例中一样并不能真正反映实际意图。会有一个单独的测试项目。
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);
}
}
收到此错误
没有为此对象定义无参数构造函数。说明:一个 当前 web 执行过程中发生未处理的异常 要求。请查看堆栈跟踪以获取有关 错误以及它起源于代码的位置。异常详情: System.MissingMethodException:未定义无参数构造函数 对于这个对象。源错误:生成了未处理的异常 在当前 Web 请求执行期间。有关信息 异常的来源和位置可以使用 下面的异常堆栈跟踪。堆栈跟踪:[MissingMethodException:否 为此对象定义的无参数构造函数。]
System.RuntimeTypeHandle.CreateInstance(RuntimeType 类型,布尔值 publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
System.RuntimeType.CreateInstanceSlow(布尔 publicOnly,布尔 skipCheckThis,布尔型填充缓存)+98
System.RuntimeType.CreateInstanceDefaultCtor(布尔 publicOnly, 布尔型 skipVisibilityChecks,布尔型 skipCheckThis,布尔型 fillCache) +241 System.Activator.CreateInstance(Type type, Boolean 非公开)+69
System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext,类型控制器类型)+67 [InvalidOperationException: 尝试创建类型控制器时出错 '*.productcontroller'。确保控制器有
【问题讨论】:
标签: asp.net-mvc-3 dependency-injection autofac