2012-01-10 3 views
0

Я использую инжектор конструктора в своих контроллерах для работы с несколькими контекстами (сначала код EF) через contextFactory, зарегистрированный в моем контейнере DI. У меня есть 3 ProductXContexts, которые наследуются от моего CoreContext. У меня есть каждый контекст в отдельном проекте. В настоящее время все они упоминаются в моем проекте MCV. Я хочу, чтобы базовый контекст (CoreContext) ссылался, но удалял ссылки ProductXContext и использовал Unity для разрешения и ввода зависимостей во время выполнения.Как переносить свободную конфигурацию Unity в конфигурацию XML?

В настоящее время я использую свободно конфигурацию, чтобы настроить мой контейнер:

var container = new UnityContainer(); 
container.RegisterType<CoreContext>(new InjectionFactory(c => ContextFactory.CreateContext())); 

Контекст завод выглядит следующим образом:

public static CoreContext CreateContext() 
{ 
    var userProduct = HttpContext.Current.Session["Product"] as string; 
    CoreContext context; 

    switch (userProduct) 
    { 
     case null: 
      throw new Exception("No product is selected. Can't define an appropriate context."); 
     case "Product 1": 
      context = new Product1Context(); 
      break; 
     case "Product 2": 
      context = new Product2Context(); 
      break; 
     case "Product 3": 
      context = new Product3Context(); 
      break; 
     default: 
      throw new Exception("Current product is not supported. Can't define an appropriate context."); 
    } 
    return context; 
} 

И контроллеры, как это:

public class MyController : Controller 
{ 
    private CoreContext _context; 

    public MyController(CoreContext context) 
    { 
     _context = context; 
    } 
... 
} 

Итак, мне нужно перейти на конфигурацию XML, если я собираюсь удалить ссылку ProductXContext s из моего проекта MVC, так как для компиляции свободного кода вы должны иметь ссылки на весь код. Но у меня теперь есть идея:

  1. как объявить инжекциюFactory в конфигурации XML.
  2. , если мне удастся объявить об этом, как создать экземпляр ProductXContext внутри моего ContextFactory, так как у меня больше нет ссылки на них.

PS: Есть ли способ зарегистрировать внешние типы, используя конфигурацию XML, а затем объявить функцию injectionFactory с помощью свободной конфигурации?

Заранее благодарен!

+0

Посмотрите, если это поможет: http://stackoverflow.com/questions/7143089/how-to-declare-the-unity-injectionfactory-in-xml-configuration –

+0

@Catalin Да, я видел это, но это не так. На самом деле это очень помогает. –

ответ

0

Если вам нужна поддержка для позднего связывания без прямых ссылок на ваши проекты ProductXContext, есть альтернативные решения. TecX project содержит усовершенствованный механизм конфигурации Unity, который позволяет сканировать сборки для реализации определенных типов и автоматически регистрировать их. Он также имеет функцию от Castle Windsor под названием Typed Factory, которая автоматически генерирует такие фабрики, как ваш ContextFactory.

+0

Кажется хорошим, но я не могу найти ссылку для загрузки в любом месте. Для загрузки на нем нет релизов. –

+0

@HenriqueMiranda Вам нужно будет скачать исходный код. В ближайшем будущем запланированных выпусков нет. –

+0

Неплохо, я полностью пропустил вкладку «Исходный код». :) –

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