微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net-mvc – 在我自己的OWIN中间件中使用Ninject DI

我已经制作了一个简单的OWIN中间件,它将为我提供一个User对象并将其添加到HttpContext.Current.Items中,以便每个请求的所有控制器和视图都可用.

这是我的代码

public class SetCurrentUserMiddleware : OwinMiddleware
{
    public SetCurrentUserMiddleware(OwinMiddleware next) : base(next)
    {
    }

    public override Task Invoke(IOwinContext context)
    {
        if (context.Request.User.Identity.IsAuthenticated)
        {
            // Do some work to get a userId... (omitted)
            var repo = new UserRepository();
            User user = repo.Get(userId);
            HttpContext.Current.Items["CurrentUserContext"] = user;
        }

        return Next.Invoke(context);
    }
}

我在我的Web应用程序中使用Ninject – 如何重构这个中间件,以便将我的UserRepository注入为依赖项?这有可能吗?

解决方法

根据 this page,您可以提供自己的构造函数参数.

public class SetCurrentUserMiddleware : OwinMiddleware
{
    private readonly IUserRepository userRepository;

    public SetCurrentUserMiddleware(OwinMiddleware next,IUserRepository userRepository) : base(next)
    {
        if (userRepository == null)
            throw new ArgumentNullException("userRepository");
        this.userRepository = userRepository;
    }

    public override Task Invoke(IOwinContext context)
    {
        if (context.Request.User.Identity.IsAuthenticated)
        {
            // Do some work to get a userId... (omitted)
            User user = this.userRepository.Get(userId);
            HttpContext.Current.Items["CurrentUserContext"] = user;
        }

        return Next.Invoke(context);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐