【问题标题】:How to bind IAuthenticationManager with Ninject in ASP.NET MVC 5?如何在 ASP.NET MVC 5 中将 IAuthenticationManager 与 Ninject 绑定?
【发布时间】:2014-04-30 10:59:59
【问题描述】:

我正在尝试将IAuthenticationManager 与 Ninject 绑定,以便可以将其注入我的AuthenticationService。问题是我目前在我的Controller 上从HttpContext.GetOwinContext() 获得IAuthenticationManager,如下所示:

private IAuthenticationManager AuthenticationManager {
    get {
        return this.HttpContext.GetOwinContext().Authentication;
    }
}

如何使用 Ninject 创建绑定,以便它知道在运行时从 HttpContext.GetOwinContext() 中查找 IAuthenticationManager?可能吗?我的问题甚至有意义吗?提前致谢!

【问题讨论】:

    标签: c# asp.net-mvc ninject asp.net-mvc-5 owin


    【解决方案1】:

    所以,我想通了。 Ninject 直接提供对HttpContext 的访问,所以我这样做了:

    kernel.Bind<IAuthenticationManager>().ToMethod(
        c =>
            HttpContext.Current.GetOwinContext().Authentication).InRequestScope();
    

    对于任何好奇的人,这里就是。

    @Meep 更新

    因此,Ninject 不必与 MVC 存在于同一个项目中。为此,我将它拉到一个单独的项目中,在我的例子中称为“X.Dependencies”。它引用了我需要实际设置绑定的所有其他项目、NuGet 包等。它包含两个文件,一个是 Ninject 添加时创建的原始 C# 文件,我已重命名为 NinjectConfiguration,还有一个名为 AssemblyReferences 的欺骗文件,它是使 Visual Studio 将所有程序集实际导入主项目所必需的。这是它的代码:

    /// <summary>
    /// Cheaty way to force Visual Studio to find all assembly references, even the ones not directly used by the main project.
    /// </summary>
    internal static class AssemblyReferences {
        internal static readonly Type t1 = typeof(Ninject.Web.Mvc.MvcModule);
    }
    

    现在,我想这可以避免,但到目前为止它对我有用。不过,我愿意接受建议。我只是从我的 MVC 项目中添加对它的引用,并让 WebActivator 负责初始化它,就像它使用常规方式一样。

    我还将 Owin 提取到它自己的名为“X.Owin”的项目中,它包含通常的 Owin 启动类,我只是将其重命名为 OwinConfiguration

    这两个都是我的“域层”的一部分,其中还包含几个其他帮助项目。列表中另一个值得注意的项目是我的“X.Mappings”,它用于配置 AutoMapper 映射。它还使用 WebActivator 进行自我初始化,所以我只需在 MVC 项目中添加对它的引用。

    由于我从 MVC 项目中提取了很多代码,所以它现在所做的基本上是路由和视图渲染。其他所有内容都根据需要传递给辅助项目。

    【讨论】:

    • GetOwinContext 是 Microsoft.Owin.Host.Systemweb nuget 包中的扩展方法。或者,您可以从 HttpContext.Current.Items["owin.Environment"] 获取上下文
    • @Alex : 你可以从 Global.asax 访问 HttpContext.Current.GetOwinContext() 吗?
    • @meep,我没有,但这可能是因为我将 Ninject 配置分离到不同的项目中,并且只有该项目具有正确的 NuGet 包和引用才能使其工作。我的 MVC 项目本身对 Owin 毫无头绪。
    • 我很想看看您是如何从 MVC 中分离出 ASP.NET 标识的。
    猜你喜欢
    • 2014-09-04
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多