Как перенести свободную конфигурацию Unity в конфигурацию XML? - PullRequest
0 голосов
/ 11 января 2012

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

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

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 из моего проекта MVC, поскольку для компиляции свободного кода у вас должны быть ссылки на весь код.Но теперь у меня есть идея:

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

PS: есть лиспособ регистрации внешних типов с помощью XML-конфигурации, а затем объявитьjectionFactory с помощью Fluent config?

Заранее спасибо!

1 Ответ

0 голосов
/ 11 января 2012

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

...