2011-12-08 94 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>(); 

让自己知道这两项服务都可以解决。