2

结构映射方法,scan.WithDefaultConventions(); 在 structuremap.MVC 5 中假设约定 IMyClassName , MyClassName 用于依赖注入。如果您只有自己创建的类,这没关系。

使用开箱即用的 ASP.NET MVC 5 应用程序,约定 IMyClassName , MyClassName 不会以用户身份退出。如何配置结构映射以忽略 ASP.NET Framework 接口/类?

4

2 回答 2

7

StructureMap.MVC5 自动使用约定 IMyClass 和 MyClass 到 DI 分辨率。从 Nuget 添加 StructureMap.MVC5 后无需其他配置。它只是工作。但是 ASP.NET Identity 不遵循 IMyClass 和 MyClass 的约定。

您将看到此异常“”没有注册默认实例,并且无法自动确定类型“IUserstore”,因为结构映射无法解析为需要实例

一种解决方法是请求 StructureMap.MVC5 通过在帐户控制器中添加 StructureMap 的 DefaultContructor 属性来使用默认构造函数,如下所示。

public class AccountController : Controller
{
    private ApplicationSignInManager _signInManager;
    private ApplicationUserManager _userManager;

    [DefaultConstructor]  //This is the attribute you need to add on the constructor
    public AccountController()
    {
    }
   // Other implementations here..........

}

于 2015-01-14T22:53:17.370 回答
2

可以像这样忽略类型:

public class AuthenticationRegistry : Registry
{
    public AuthenticationRegistry()
    {
        this.Scan(scan =>
        {
            scan.TheCallingAssembly();
            scan.WithDefaultConventions();
            scan.ExcludeType<IdentityUser>();
        });
    }
}
于 2014-12-22T22:37:58.897 回答