2012-01-26 4 views
4

У меня есть проект MVC, где я использую AutoMapper для сопоставления объектов Entity Framework для просмотра моделей. Код, который определяет сопоставления, находится в классе boostrapper, который вызывается автоматически при запуске приложения (App_Start, Global.asax)AutoMapper в Service Layer

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

Одна из проблем, с которыми я сталкиваюсь, теперь мне нужно сопоставить объекты моей базы данных с некоторыми объектами домена на моем уровне обслуживания. Я думаю, что все будет хорошо работать в приложении MVC, потому что bootstrapper все еще вызывается в Global.asax.

Есть ли способ, которым мой код преобразования работает как для моего приложения MVC, так и для другого приложения, отличного от MVC (может быть служба WCF, консольное приложение и т. Д.) Где я могу поместить этот код сопоставления, чтобы он получал вызываемые обоими приложениями только один раз?

+0

Где вы собираетесь принимать свои услуги? Если в другом приложении вы должны выполнить сопоставление, как в своем приложении MVC. В общем случае вы можете переместить код сопоставления в общую библиотеку. – paramosh

+0

Да в другом проекте. Есть ли хороший способ убедиться, что bootstrapper вызывается в другом проекте? Если это служба WCF, есть ли какие-либо приложения app_start для WCF? – Dismissile

+0

Посмотрите, вот хороший ответ на ваш вопрос http://stackoverflow.com/questions/5903843/initialize-in-wcf-service-application-project Также некоторые полезные решения описаны здесь http://blogs.msdn.com/b /wenlong/archive/2006/01/11/511514.aspx – paramosh

ответ

2

Здесь статический класс, может быть использован для инициализации WCF услуг:

public static class ServiceConfigurations 
{ 
    private static bool mappingConfigured = false; 

    public static void ConfigureMapping() 
    { 
     if (mappingConfigured) 
     { 
      return; 
     } 

     Mapper.CreateMap<Model1, Model2>(); 

     mappingConfigured = true; 
    } 

    public static void CleanupMapping() 
    { 
     Mapper.Reset(); 
     mappingConfigured = false; 
    } 
} 
0

Почему бы не просто добавить файл global.asax в проект услуг?

Бросьте свои сопоставления в новый проект, обратитесь к обоим, и все готово.

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