Управление внедрением зависимостей в конструктор (MS Unity) - PullRequest
2 голосов
/ 27 февраля 2011

Я создаю многоуровневое приложение и стараюсь максимально сохранить слои, поэтому для этой цели я использую контейнер IoC.В любом случае, я пытаюсь расширить эту статью , чтобы перенести проверку бизнес-логики на уровень обслуживания.Мне удалось решить все проблемы с зависимостями, кроме зависимости класса ModelStateWrapper от самого ModelState.Вот мои классы:

public interface IValidationDictionary
{
    void AddError(string key, string errorMessage);
    bool IsValid { get; }
}

public class ModelStateWrapper : IValidationDictionary
{
    private ModelStateDictionary _modelState;

    public ModelStateWrapper(ModelStateDictionary modelState)
    {
        _modelState = modelState;
    }

    public void AddError(string key, string errorMessage)
    {
        _modelState.AddModelError(key, errorMessage);
    }

    public bool IsValid
    {
        get { return _modelState.IsValid; }
    }
}

Класс ModelStateWrapper находится в папке Services в моем приложении MVC3.Пока IValidationDictionary находится внутри папки Abstract внутри моего слоя Services.В моей конфигурации Unity я сделал следующее:

.RegisterType<IValidationDictionary, ModelStateWrapper>(
    new HttpContextLifetimeManager<IValidationDictionary>())

Итак, есть ли что-нибудь, что я мог сделать, чтобы добавить объект ModelState в класс ModelStateWrapper с помощью IoC?Или я должен явно / вручную создать экземпляр ModelStateWrapper в контроллерах и передать в качестве аргумента ModelState?

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

1 Ответ

0 голосов
/ 03 сентября 2013

Я думаю, вам нужно переместить класс modelstatewrapper в общую сборку. Вы можете ссылаться на эту общую сборку из уровня обслуживания, уровня бизнес-логики и т. Д. Общая сборка может содержать классы вашего домена, dto, определения служб и т. Д. И т. Д. Вы создаете класс начальной загрузки, который регистрирует все типы из общей сборки в вашем контейнере. Вызовите этот загрузчик из сервиса, BL-слоя и т. Д.

Надеюсь, это поможет

Привет

...