Разрешение зависимостей как отдельный проект. Как? - PullRequest
3 голосов
/ 19 октября 2010

Я создаю новое приложение, используя asp.net mvc, я использую munq IOC-контейнер для внедрения зависимостей. Проблема в том, что я хочу создать новый проект для разрешения зависимостей, где я могу зарегистрировать все контроллеры mvc проект и репозитории инфраструктурного проекта. Мне нужно добавить проект разрешения зависимостей в качестве ссылки в моем приложении MVC, так как это отправная точка ... но проблема в том, чтобы зарегистрировать контроллеры в этом отдельном приложении, мне нужно иметь ссылка на mvc в самом проекте разрешения зависимостей ... но это невозможно, потому что это может привести к циклической ссылке ..

так как решить эту проблему? или каков наилучший способ управления разрешением зависимостей? Я не хочу в конечном итоге все зарегистрировать в Global.asax

Ответы [ 2 ]

3 голосов
/ 20 октября 2010

Получить последнюю версию с вкладки источника на Munq.Codeplex.com. Эта версия имеет улучшенный вид, и это версия, с которой я больше всего знаком, и я ее написал.

Чтобы избежать циклических ссылок для регистрации, создайте проект класса, который включает в себя ссылки на Munq.Interfaces и интерфейсы и реализации, которые вы хотите зарегистрировать.

Создайте класс, который реализует IMunqConfig. У него есть один метод void RegisterIn (контейнер IIocContainer) . Реализуйте этот метод.

public class MyRegistration : IMuncConfig
{

    public void RegisterIn(IIocContainer container)
    {

        container.Register<IMyInterface>(c => new MyImplementation());

        //       OR

        container.Register<IMyInterface, MyImplementation>();

       // Repeat as required for each thing to register
    }
}

Тогда в global.asax

protected void Application_Start()
{
    IocContainer = new Container();
    Munq.COnfigurationLoader.FindAndRegisterDependencies(container);

    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);
}

Это будет искать в каталоге bin любые библиотеки, в которых есть классы, реализующие IMunqConfig, и выполнять метод RegisterIn для каждого. Так что просто поместите регистрационные dll в каталог bin, и регистрация произойдет автоматически:)

Мэтью

0 голосов
/ 05 августа 2016

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

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

Регистрации для вашего инфраструктурного проекта в идеале должны быть в этом проекте, особенно если это не то, что вы собираетесь сделать доступным для других проектов, использующих различные контейнеры DI. Если этот проект должен оставаться независимым от DI, то, возможно, имеет смысл разделить регистрацию DI в отдельный проект.

Но я бы определенно не сделал службу (например, ваше хранилище) ответственной за регистрацию внутренних зависимостей своих потребителей (например, ваше приложение MVC.)

...