2015-05-12 7 views
1

У меня есть следующая структура проекта, в моем решении:Обращение с Зависимость от от другого проекта в консольном приложении

Project.Repository (библиотека классов)

Project.Core (библиотека классов)

проекта .Web (MVC5 веб-передний конец)

Project.Scheduler (Console Application)

Я использую Unity для обработки моего DI.

Моя проблема

У меня есть метод, который сидит в базовом слое, этот метод имеет зависимость в IProcessDataService интерфейс, который обрабатывается в моей Unity конфигурации.

//Service    
    container.RegisterType<IProcessDataService, ProcessDataService>(new PerRequestLifetimeManager()); 

Я недавно создал свой проект консольного приложения, который будет в основном ссылаться на указанный метод и будет выполняться по расписанию окна.

Как мне получить доступ к этому методу из статического основного метода Консольного приложения, учитывая, что у меня есть зависимость от моего основного интерфейса? Основной метод

public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Console.WriteLine("Begin Automation Process"); 

      //Run method from Core layer which has a dependency on IProcessDataService 

     } 
    } 
+0

Сначала вам нужно будет инициализировать новый контейнер Unity и зарегистрировать свои сопоставления. Затем вам придется использовать шаблон локатора службы для разрешения зависимостей IProcessDataService. http://stackoverflow.com/questions/22961463/how-can-i-set-up-unity-3-to-work-in-a-console-application –

+1

, пожалуйста, не используйте шаблон локатора службы. Просто подключите свой контейнер, чтобы создать граф объектов и получить корневой объект и начать с него. –

+0

@SamHolder, но он не сможет вложить любую зависимость в статический Основной метод? Если вы используете container.Resolve, это в основном локатор сервисов. –

ответ

3

вашей консоли приложение является ваш composition root и вы должны делать все ваши проводки вверх там.

Затем вы можете разрешить свой объект из контейнера и вызвать метод на нем.

+0

Я в основном перевернул содержимое UnityConfig.cs и UnityMvcActivator.cs в свой собственный метод ConfigureUnity() и вызвал это из моей точки входа (Main). Затем я смог создать свой необходимый объект, выполнив: ProcessDataService service = container.Resolve (); И все мои зависимости были обработаны. Убедитесь, что вы передали что-либо из файла web.config в файл app.config, необходимый для этих зависимостей. – JsonStatham

Смежные вопросы