Это можно описать на примере. Например, предположим, что у вас есть основная библиотека, на которой вы основываете все свои индивидуальные приложения. Назовите это MyCompany.Core. Обычно каждое написанное вами приложение должно содержать ссылку на MyCompany.Core, а затем приложение должно позаботиться о начальной загрузке и вызове MyCompany.Core для запуска соответствующих служб и т. Д. В правильный заказ. Это не имеет особого смысла, если учесть, что ядро, вероятно, лучше знает, как оно должно быть запущено и т. Д.
Чтобы использовать MEF для внедрения зависимостей, ваше ядро должно сделать следующее:
[Import("/Application", typeof(IBespokeApplication))]
private IBespokeApplication bespokeApplication;
Само ядро будет содержать код запуска приложения и может вызывать что-то вроде этого после запуска всех своих служб:
bespokeApplication.Start();
В сделанном на заказ приложении вы должны экспортировать себя:
[Export("/Application", typeof(IBespokeApplication))]
public class MyApplication : IBespokeApplication
{
public void Start()
{
/* start app */
}
}
Теперь заказное приложение может содержать прямую ссылку на MyCompany.Core и может вызывать службы напрямую, или вы даже можете предоставлять службы как экспорт и импортировать их в приложение. Например, в основном:
[Export("/LoggingService", typeof(ILoggingService))]
public class NLogLoggingService : ILoggingService
{
/* ... */
}
Затем в индивидуальном приложении:
[Import("/LoggingService", typeof(ILoggingService))]
private ILoggingService loggingService;
... и когда вы хотите его использовать:
loggingService.LogInformation("My Message");
Насколько я могу судить из литературы, в этом суть внедрения зависимостей.
person
Community
schedule
26.06.2009