我在寫一個執行幾個任務的小框架。 有些任務需要通過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; }
任何人都有關於如何解決這個問題的想法?
我可以將內核傳遞給不同的任務,但有些東西告訴我這不是正確的方法。
親切的問候
好的事,但在你的代碼是不正確的。在你的create方法中,返回類型被設置爲「DDPSchedulerTask」,但你要返回一個「DDPSchedulerTaskFactory」。另外,你能否解釋一下你的解決方案?我應該從哪裏調用create方法,因爲我希望Unity的其他屬性也可以被注入。 – Complexity
@Complexity是的,只是糾正它 – gisek
感謝您的更正。你介意從我需要調用這個工廠的地方展示我,因爲我想繼續使用Ninject來確保依賴注入。我沒有看到Ninject在這裏的膠水。我仍然需要傳入'someAdditionalParameters',我想讓Ninject內核來解決這個問題。 – Complexity