2011-12-08 189 views
0

我正在使用StructureMap for IoC,它對於常規控制器工作正常,但我無法使它適用於區域。我有以下AccountController在管理區:在ASP.NET MVC區域中使用StructureMap

public class AccountController : Controller 
{ 
    private readonly IFormsAuthenticationService formsService; 
    private readonly IMembershipService membershipService; 

    public AccountController(IFormsAuthenticationService formsService, IMembershipService membershipService) 
    { 
     this.formsService = formsService; 
     this.membershipService = membershipService; 
    } 
    ... 
} 

而這裏的錯誤:

System.InvalidOperationException: An error occurred when trying to create a controller of type 'Foo.Areas.Administration.Controllers.AccountController'. Make sure that the controller has a parameterless public constructor. ---> System.MissingMethodException: No parameterless constructor defined for this object.

任何幫助將不勝感激!

編輯

StructureMap解決不了MembershipProvider
這裏的解決方案:

For<MembershipProvider>().Use(Membership.Providers["AspNetSqlMembershipProvider"]); 

回答

0

我懷疑這是地區問題,因爲我愉快地使用它們。這更可能是一個純粹的國際奧委會問題。當一個注入的服務不能被你的容器解析時,你會得到這個錯誤,其結果是容器無法匹配構造函數的簽名,並試圖回退到不存在的空構造函數。

所以,我的第一個直覺就是確保兩個注入的服務都可用。有可能是其中一個沒有正確創建;一個常見的原因是會員提供商無法連接到其數據庫或類似的。

用於診斷,在您的global.asax中創建容器後,查看是否可以手動解決這兩個服務。我不知道SM,但類似:

var s = container.Resolve<IMembershipService>(); 

讓自己知道這兩項服務都可以解決。