Как я могу динамически связать / вставить строку подключения к базе данных в мой контроллер? - PullRequest
1 голос
/ 12 декабря 2011

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

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

До сих пор я видел такие примеры:

   protected IProductsRepository ProductsRepository = null; 

   public ProductsController(IProductsRepository productsRepository) 
   { 
      ProductsRepository = productsRepository; 
   } 

Но как в контроллер вводится правильное значение для productsRepository?Я видел некоторые упоминания о продуктах IOC, но я не уверен, с чего начать, и не подходят ли эти продукты для очень больших приложений?

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

В зависимости от ваших полных требований, вот пара вещей, на которые вы можете посмотреть:

Структура внедрения зависимостей, такая как StructureMap. Вот статья .

Чтобы просто обработать конструкцию контроллера самостоятельно, вам нужно создать собственную фабрику контроллеров, реализующую IControllerFactory. Эта статья о процессе выполнения приложений MVC должна помочь вам лучше понять.

После того как вы внедрили IControllerFactory, вы можете подключить его к Global.asax следующим образом:

protected void Application_Start()
{
    RegisterRoutes(RouteTable.Routes);

    ControllerBuilder.Current.SetControllerFactory(typeof(CustomControllerFactory));
}
1 голос
/ 12 декабря 2011

Я бы использовал Unity в качестве контейнера IOC.Он не является частью .NET Framework, но от Microsoft.Другой вариант будет MEF .Это часть структуры, но не только структура МОК.

РЕДАКТИРОВАТЬ: Как @Daniel предположил, что есть пакет Nuget для MVC3 на http://nuget.org/packages/Unity.Mvc3. Я часто использую Unity в своих проектах.

...