0

我将 StructureMap 用于 IoC,它适用于常规控制器,但我无法使其与区域一起使用。我AccountController在管理区有以下内容:

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"]);
4

1 回答 1

0

我怀疑这是区域的问题,因为我很高兴地使用它们。这更有可能是纯粹的国际奥委会问题。当您的容器无法解析其中一个注入的服务时,您会收到此错误,这会导致容器无法匹配构造函数的签名并尝试回退到正确的不存在的空构造函数。

所以,我的第一直觉是确保两个注入的服务可用。其中一个可能没有正确创建;一个常见原因是成员资格提供程序无法连接到其数据库或类似情况。

为了诊断,在您的 global.asax 中,在创建容器后,查看您是否可以手动解决这两个服务。我不知道 SM,但类似:

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

满足自己,这两个服务都可以解决。

于 2011-12-08T11:05:35.407 回答