我正在尝试IAuthenticationManager
与Ninject绑定,以便可以将其注入到我的AuthenticationService
。问题是我目前IAuthenticationManager
从HttpContext.GetOwinContext()
上获得Controller
,如下所示:
private IAuthenticationManager AuthenticationManager {
get {
return this.HttpContext.GetOwinContext().Authentication;
}
}
我该如何去创造与Ninject,使其知道如何寻找的结合IAuthenticationManager
从HttpContext.GetOwinContext()
在运行时?是否有可能?我的问题甚至有意义吗?提前致谢!
所以,我想通了。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项目中提取了很多代码,因此,到目前为止,它所做的基本上只是路由和视图渲染。根据需要将其他所有内容传递到帮助程序项目中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句