c# - 如何在 ASP.NET MVC 5 中将 IAuthenticationManager 与 Ninject 绑定(bind)?

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

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

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

我如何着手创建与 Ninject 的绑定(bind),以便它知道在运行时从 HttpContext.GetOwinContext() 中查找 IAuthenticationManager?可能吗?我的问题有道理吗?提前致谢!

最佳答案

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

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

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

@Meep 更新

因此,Ninject 不必与 MVC 存在于同一个项目中。为此,我将它拉到一个单独的项目中,在我的例子中称为“X.Dependencies”。它引用了我实际设置绑定(bind)所需的所有其他项目、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 进行 self 初始化,因此我只需在 MVC 项目中添加对它的引用即可。

由于我已经从 MVC 项目中提取了大量代码,所以此时它所做的基本上就是路由和 View 渲染。其他一切都根据需要传递给帮助程序项目。

关于c# - 如何在 ASP.NET MVC 5 中将 IAuthenticationManager 与 Ninject 绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22586508/

相关文章:

c# - 寻找实现通电的方法

asp.net-mvc - 获取 Power BI Embedded 的 Azure Power BI 容量的授权代码

dependency-injection - 在 Windows 客户端 (WPF) 应用程序中进行依赖注入(inject)的正确方法

c# - 几乎相同方法中的不同行为异步/等待

C# - 正则表达式匹配整个单词

c# - HighCharts (highstock) - 数据不会显示

c# - 是否可以将不同的接口(interface)绑定(bind)到实现所有接口(interface)的类的同一个实例?

c# - Ninject 和依赖注入(inject) WebApi 属性

c# - 如何在展开表单时自动移动和调整按钮和标签的大小?

css - 在 asp.net MVC 页面底部推送页脚而不显示小页面的滚动条