2012-07-09 44 views
1

我有一个构造函数从依赖注入框架(Autofac)获取它的依赖项。问题是我不能做任何事情在构造函数否则除了让这些依赖关系,如果我写的比那些依赖任务其它构造函数中的任何声明,我得到以下错误: -无法初始化使用依赖注入的构造函数中的变量

No parameter less constructor is defined for this object

我要评论如下这个工作只读字符串赋值: -

public RelationshipController(ICustomerService customerService,) 
{ 
    this.customerService = customerService; 
    //someReadonlyString = "abcd"; 
} 

有人可以告诉我,这是怎么回事?

+1

将赋值添加到构造函数不会导致此错误。你能发布更多的上下文吗?如何设置依赖关系解析器?你的容器注册是怎样的?什么是确切的错误消息,内部异常是什么?也许有'ICustomerService'实现不与控制器有关的问题.... – nemesv 2012-07-09 14:22:03

+0

..也就是说,'''在构造函数签名中做了什么? – 2012-07-09 16:51:53

+2

我看到'RelationshipController'这可能意味着你正在使用ASP.NET MVC(但你没有在这个标签)。您可能没有在MVC中正确注册Autofac。在这种情况下,MVC不会使用Aufofac,只能使用默认的构造函数。请显示您的配置,以及完整的异常信息+堆栈跟踪。 – Steven 2012-07-10 07:45:15

回答

1

当在容器中找不到请求的服务(在本例中为ICustomerService)时,Autofac将继续寻找默认(a.ka.无参数)构造函数。你显然没有默认的构造函数,因此Autofac抛出异常。

我的猜测是,真正的错误在于ICustomerService接口的注册码。

+0

这段代码不是真正的代码,只是为了显示情况发生了什么。 – teenup 2012-07-09 18:27:12

+0

我有3-4依赖关系被传递到构造函数,并且所有东西都被正确注册,因为:如果我只删除只读字符串变量赋值,那么一切正常。 – teenup 2012-07-09 18:28:33

+1

@puretechy - 好的,但这就是为什么我们需要看到更多的图片,因为你所说的只是不计算。 Autofac关心(而且看不到)你的构造函数*做什么*,只是公共签名看起来像什么。修剪你的代码到一个仍然显示相同症状的编译版本,然后更新你的问题。那么也许我们能够帮助你发现问题。还请包括容器注册码。 – 2012-07-09 19:47:23

0

我看到一个RelationshipController可能意味着你正在使用ASP.NET MVC。您可能没有在MVC中正确注册Autofac。在这种情况下,MVC不会使用Aufofac,只能使用默认的构造函数。

相关问题