Я пытался чего-то добиться с помощью Ninject (без большого понимания библиотеки) и понял, что может быть невозможно делать то, что я хочу.
У меня есть один из наших собственных проектов, на который я ссылался, и я пытался использовать Ninject для добавления некоторых зависимостей, например:
public class ImageHelper
{
[Inject]
public static AdaptiveImageSettings Settings { get; set; }
[Inject]
public static IImageSizerFactory Factory { get; set; }
}
}
Цель состоит в том, чтобы иметь некоторые настройки (которые могут обслуживаться разными классами) и фабрику, которая может создавать экземпляры класса ImageHelper. Я не слишком зациклен на том, что статично, а что нет прямо сейчас.
Если я попытаюсь использовать свой ImageHelper из веб-приложения, ссылающегося на этот проект, эти свойства всегда будут нулевыми. Со страницы в моем веб-приложении со следующими зависимостями вводятся нормально:
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[Inject]
public NetC.Core.ImageSizer.IImageSizerFactory Factory { get; set; }
}
Из того, что я прочитал, это связано с тем, что ядро обрабатывается автоматически, но я не могу найти способ получить доступ к ядру, чтобы я мог разрешить эти свойства. Может ли кто-нибудь дать мне несколько советов о том, что, если это разумно возможно, или каким может быть следующий шаг? До сих пор я видел только анти-шаблон ServiceLocator и не мог найти расширения, которое отвечало бы всем требованиям.
Factory
на своей странице? Потому что это выглядит странно — вы, кажется, утверждаете, что Ninject успешно разрешает фабрику, но не разрешает ее внутренние зависимости. Конечно, эти свойства статичны, поэтому Ninject не хочет их трогать. Вы пытались иметь там свойства экземпляра? - person Wiktor Zychla   schedule 02.06.2014OnPageInitComplete
простым вызовомkernel.Inject(page)
, как описано здесь. stackoverflow.com/questions/4933695/ Однако разрешение зависимости свойств должно по-прежнему работать рекурсивно, и поэтому я понятия не имею, почему свойства экземпляра вашего вспомогательного изображения не разрешаются. Моя идея состояла бы в том, чтобы попробовать инъекцию конструктора. Не могли бы вы попробовать и отчитаться? - person Wiktor Zychla   schedule 02.06.2014