2012-07-09 41 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,只能使用默認的構造函數。

相關問題