相关疑难解决方法(0)

为ASP.NET身份配置Unity DI

我使用Unity成功为所有常规构造注射,如仓库等,但我不能让它与ASP.NET身份类的工作.设置是这样的:

public class AccountController : ApiController
{
    private UserManager<ApplicationUser> _userManager { get; set; }

    public AccountController(UserManager<ApplicationUser> userManager)
    {
        if (userManager == null) { throw new ArgumentNullException("userManager"); }
        _userManager = userManager;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

使用Unity的这些配置:

unity.RegisterType<AccountController>();
unity.RegisterType<UserManager<ApplicationUser>>(new HierarchicalLifetimeManager());
unity.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(new HierarchicalLifetimeManager());
Run Code Online (Sandbox Code Playgroud)

这与Autofac,Ninject的其他帖子相同,例如,但在我的情况下它不起作用.错误消息是:

尝试创建"AccountController"类型的控制器时发生错误.确保控制器具有无参数的公共构造函数.手动创作当然是:

public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>("Mongo")))
{
}
Run Code Online (Sandbox Code Playgroud)

怎么了?

UPDATE

正如@emodendroket所建议的,缩短代码就可以了.不需要Unity.Mvc包.

unity.RegisterType<IUserStore<IdentityUser>, 
  MyCustomUserStore>(new HierarchicalLifetimeManager());
Run Code Online (Sandbox Code Playgroud)

public AccountController(UserManager<IdentityUser> _userManager,
  IAccountRepository _account)
{
    // ...
Run Code Online (Sandbox Code Playgroud)

c# asp.net dependency-injection unity-container asp.net-identity

18
推荐指数
2
解决办法
2万
查看次数

如何使用unity注入ApplicationUserManager

我这样ApplicationUserManager定义:

public class ApplicationUserManager : UserManager<ApplicationUser, int>
    { 
        public ApplicationUserManager(IUserStore<ApplicationUser, int> store)
        : base(store)
        {
        }

       public override Task<IdentityResult> CreateAsync(ApplicationUser user, string password)
        {
            var result = base.CreateAsync(user, password);
            //... 
            Repository.DoSomething(...); //Repository is null here
            //..
        }          

       [Dependency]
       public IRepository Repository { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我的存储库没有被注入.Repository总是null

我的统一配置中也有这一行

.RegisterType<ApplicationUserManager>(new HierarchicalLifetimeManager())
Run Code Online (Sandbox Code Playgroud)

如何注射?

更新N:

这是我的控制器的代码; 我是怎么得到的UserManager:

public ApplicationUserManager UserManager
{
    get
    {
        return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
    }
    private set
    {
        _userManager = value;
    } …
Run Code Online (Sandbox Code Playgroud)

dependency-injection unity-container asp.net-identity asp.net-web-api2

8
推荐指数
1
解决办法
7422
查看次数