Архитектура сервисов mvc и контроллера asp.net - PullRequest
2 голосов
/ 14 августа 2011

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

Что у меня есть:

  1. библиотека классов CoreService с множеством интерфейсов IMail, Ilog, ISession
  2. При запуске приложения я создал IMail, Ilog, ISession основанные классы и передал его классу CoreService
  3. базовый класс контроллера с экземпляром CoreService (свойство CoreService Services {get;})
  4. Плагин пользователя использует интерфейсы CoreService

Проблема: Каждый раз, когда мне нужно добавить новый сервис, я должен редактировать запуск приложения, CoreService. В идеале я хотел бы просто создать класс lib для IMail (или любого другого сервиса) и зарегистрировать его в web.config или в запуске приложения.

Буду признателен за любые советы или ссылки, которые мне помогут.

Спасибо всем таким пользователям!

Ответы [ 2 ]

2 голосов
/ 14 августа 2011

Взгляните на Ninject и XML-конфигурация. Привязка .

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

Если вы добавите совершенно новые сервисы, которые Ninject (или другие DI-контейнеры - например, Unity) не решают, вам нужно будет отредактировать свой код. Я не думаю, что этого можно избежать.

1 голос
/ 14 августа 2011

Что вам нужно, это структура внедрения зависимостей для разрешения ваших зависимостей. Фреймворки DI будут управлять созданием, временем жизни и утилизацией объектов.

builder.RegisterType<MySession>().As<ISession>().InstancePerHttpRequest();
builder.RegisterType<MyMail>().As<IMail>().Singleton();

Затем вы можете использовать инжектор конструктора для внедрения этих

public class MyController : BaseController
{
    public MyController(ISession session, IMail mail)
    {
         _session = session;
         _mail = mail; 
    }

   //other methods and member variables
}

Таким образом, вам нужно изменить только одно место, когда вам нужно добавить новые зависимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...