我可以使用 Ninject 将 IKernel 注入 class
Can I inject IKernel into class with Ninject
我想在不使用 new 的情况下注入 AuthenticationService:
IAuthenticationService authenticationService = null;
if (HttpContext.Current != null && HttpContext.Current.Session["LoggedUser"] == null)
{
HttpContext.Current.Session["LoggedUser"] = new AuthenticationService();
}
authenticationService = (AuthenticationService)HttpContext.Current.Session["LoggedUser"];
我正在考虑使用 kernel.Get(),但我不知道注入 IKernel 是否是一个好习惯。我也在考虑使用工厂,但我不知道如何将它与 Ninject.
结合起来
你有什么建议?
您不应将 IKernel 注入 class,如果您正确利用了 Ninject 提供的 IOC 容器,则没有必要这样做。您可以为服务设置类似于以下内容的绑定:
kernel.Bind<IAuthenticationService>().To<AuthenticationService>();
请注意,根据您的 Ninject 设置方式,这可能发生在几个不同的地方。如果您提供更多代码,我可以详细说明这是怎么回事。对于许多人来说,它在 NinjectWebCommon.cs class.
然后在你想要注入 IAuthenticationService
的任何 class 中,只需像下面这样传入 IAuthenticationService
:
public class WhateverClass
{
private IAuthenticationService _authenticationService;
public WhateverClass(IAuthenticationService authenticationService)
{
_authenticationService = authenticationService;
}
//some other properties or methods that make use of authentication service here
}
我想在不使用 new 的情况下注入 AuthenticationService:
IAuthenticationService authenticationService = null;
if (HttpContext.Current != null && HttpContext.Current.Session["LoggedUser"] == null)
{
HttpContext.Current.Session["LoggedUser"] = new AuthenticationService();
}
authenticationService = (AuthenticationService)HttpContext.Current.Session["LoggedUser"];
我正在考虑使用 kernel.Get(),但我不知道注入 IKernel 是否是一个好习惯。我也在考虑使用工厂,但我不知道如何将它与 Ninject.
结合起来你有什么建议?
您不应将 IKernel 注入 class,如果您正确利用了 Ninject 提供的 IOC 容器,则没有必要这样做。您可以为服务设置类似于以下内容的绑定:
kernel.Bind<IAuthenticationService>().To<AuthenticationService>();
请注意,根据您的 Ninject 设置方式,这可能发生在几个不同的地方。如果您提供更多代码,我可以详细说明这是怎么回事。对于许多人来说,它在 NinjectWebCommon.cs class.
然后在你想要注入 IAuthenticationService
的任何 class 中,只需像下面这样传入 IAuthenticationService
:
public class WhateverClass
{
private IAuthenticationService _authenticationService;
public WhateverClass(IAuthenticationService authenticationService)
{
_authenticationService = authenticationService;
}
//some other properties or methods that make use of authentication service here
}