我一直试图通过Ninject实现某些目标(对图书馆没有很好的理解)并且意识到可能无法做我想做的事。
我已经获得了我自己引用的项目之一,并尝试使用Ninject推送一些依赖项,例如:
public class ImageHelper
{
[Inject]
public static AdaptiveImageSettings Settings { get; set; }
[Inject]
public static IImageSizerFactory Factory { get; set; }
}
}
目标是设置一些设置(可以由不同的类提供)和一个可以创建ImageHelper类实例的Factory。我不太关注什么是静态的,现在还没有。
如果我尝试使用引用该项目的WebApplication中的ImageHelper,但这些属性始终为null。从我的WebApplication中的一个页面中,以下内容可以很好地注入依赖项:
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[Inject]
public NetC.Core.ImageSizer.IImageSizerFactory Factory { get; set; }
}
据我所知,这是因为内核会自动处理,但我似乎无法找到获取内核的方法,因此我可以解析这些属性。有人可以给我一些指示,如果这是合理可能的,或者下一步可能是什么?到目前为止,我只看到了ServiceLocator反模式,似乎无法找到符合要求的扩展程序。
答案 0 :(得分:0)
对于任何容器来说,似乎都是一个糟糕的用例。
只需在应用程序启动时手动分配它们
答案 1 :(得分:0)
你应该转向构造函数注入:
public class ImageHelper
{
private readonly AdaptiveImageSettings settings;
private readonly IImageSizerFactory factory;
public ImageHelper(AdaptiveImageSettings settings, IImageSizerFactory factory) {
this.settings = settings;
this.factory = factory;
}
}
当您从Ninject请求ImageHelper
时,ninject会自动将正确的依赖项注入其构造函数中。构造函数有许多优点,例如:
所以,只要你可以,尽可能多地进行构造函数注入。