Я пишу небольшую структуру, которая выполняла несколько задач. Некоторые задачи требуют определенных свойств, которые вводятся через Ninject.Является ли хорошей практикой передавать ядро Ninject?
Давайте предположим, что у меня есть следующий конструктор в своем базовом классе, который представляет собой единственную задачу:
protected DDPSchedulerTask(ILogger logger, List<string> platforms, IBackOfficeDataStore backOfficeDataStore, ICommonDataStore commonDataStore)
{
_logger = logger;
_platforms = platforms;
_backOfficeDataStore = backOfficeDataStore;
_commonDataStore = commonDataStore;
}
Эти свойства необходимы для всех задач, так что я впрыскивать их с помощью Ninject со следующим модулем Ninject.
public class DDPDependencyInjectionBindingConfiguration : NinjectModule
{
#region NinjectModule Members
/// <summary>
/// Loads the module into the kernel.
/// </summary>
public override void Load()
{
Bind<Scheduler>().ToSelf(); // Make sure that the 'Scheduler' is resolved to itself.
Bind<ILogger>().ToMethod(context => LogFactory.Create()); // Make sure that an instance of an ILogger is created through the LogFactory.
// Straightforward binding.
Bind<ICommonDataStore>().To<Common>();
Bind<IBackOfficeDataStore>().To<BtDbInteract>();
Bind<IDirectoryResolver>().To<Demo>();
}
#endregion
}
Моего объект самого планировщик, если первый элемент в цепи, которая должна быть решена Ninject, поэтому я разрешение вручную через Ninject.
var schedulerInstance = kernel.Get<Scheduler>();
Теперь мой планировщика есть метод, который добавляет задачи в список, так что не с помощью Ninject:
var tasksList = new List<DDPSchedulerTask>
{
new AWNFileGeneratorTask(_logger, availablePlatforms, _backOfficeDataStore, _commonDataStore)
};
Затем все эти задачи выполняются. Теперь некоторые из этих задач требуют дополнительных зависимостей, которые я бы хотел разрешить через Ninject, но как мне это сделать?
Внутри задачи я создал свойство с атрибутом Inject
, но объект остается нулями.
[Inject]
private IDirectoryResolver directoryResolver { get; set; }
У кого-нибудь есть идея, как это можно решить?
Я могу передать ядро в разные задачи, но что-то говорит мне, что это неправильный подход.
С уважением
Хорошо, но что-то в вашем коде не правильно. В вашем методе создания возвращаемый тип устанавливается в 'DDPSchedulerTask', но вы возвращаете' DDPSchedulerTaskFactory'. Кроме того, можете ли вы объяснить немного больше своего решения?Откуда мне следует вызвать метод create, потому что я хочу, чтобы дополнительные свойства также были введены Unity. – Complexity
@Complexity yep, только что скорректировал его – gisek
Спасибо за исправление. Вы не возражаете, показывая мне, откуда мне нужно позвонить на эту фабрику, потому что я хотел бы продолжать использовать Ninject для обеспечения Injection Dependency. Я не вижу клей для Ninject здесь. Мне все равно нужно передать «someAdditionalParameters», где я хочу, чтобы ядро Ninject разрешило это. – Complexity