Ninject 属性注入无效。

5

我是 Ninject 的新手,需要一些帮助。

我的解决方案包括 web.form(表示层)和多个其他类库项目。

在 web.form 应用程序中,我有一个 NinjectWebCommon cs 文件,其中包含以下内容:

kernel.Bind<HttpContext>()
      .ToMethod(ctx => HttpContext.Current).InThreadScope();

kernel.Bind<HttpContextBase>()
      .ToMethod(ctx => new HttpContextWrapper(HttpContext.Current)).InTransientScope();

kernel.Bind<MPIBE.DESTINATION.CORE.SiteContext>()
      .ToMethod(ctx => new MPIBE.DESTINATION.CORE.SiteContext(
                           new HttpContextWrapper(HttpContext.Current)
       ));

我正在尝试获取一个类的实例(遵循构造函数)

public SessionUtilities(SiteContext siteContext)
{
    _siteContext = siteContext;
}

我注意到只能从web.forms应用程序中获取实例,而无法从其他项目(类库)中获取。这有意义吗?

我正在尝试通过属性注入获取实例。

[Inject]
public SessionUtilities _sessionUtilities { get; set; }
1个回答

12

我怀疑包含你的_sessionUtilities属性的类是通过new 创建而不是通过Ninject创建。

只有当包含实例也是由Ninject创建时,Ninject才会注入您的_sessionUtilities属性,这可以通过使用kernel.Get()创建或被注入它本身来实现。


实例是通过上面所示的属性注入创建的,而不是使用“new”关键字创建。 - profanis
我正在谈论“包含类”的实例。包含“_sessionUtilities”属性的类。它是如何创建的? - shamp00
这个类是通过new实例化的...那么,这个类也需要通过ninject实例化吗? - profanis
3
是的!依赖注入是沿着龟脚下的龟的原则进行的。 - shamp00
是的@Ian,可以通过静态的“ServiceLocator”实现,例如在这篇文章中描述的那样。然而,服务定位器被认为是一种代码异味,因为您的代码与服务定位器紧密耦合。最好传递一个“SessionUtilitiesProvider”类。 - shamp00
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接