【问题标题】:Managing Constructor Dependency Injection (MS Unity)管理构造函数依赖注入(MS Unity)
【发布时间】:2011-07-05 07:12:45
【问题描述】:

我正在构建一个多层应用程序并尝试尽可能多地保留这些层,因此我为此目的使用了 IoC 容器。无论如何,我正在尝试扩展this article 以将我的业务逻辑验证移动到服务层。除了 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 类位于我的 MVC3 应用程序的 Services 文件夹中。虽然 IValidationDictionary 在我的 Services 层内的 Abstract 文件夹中。在我的 Unity 配置中,我执行了以下操作:

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

那么,现在我可以做些什么来使用 IoC 将 ModelState 对象注入到 ModelStateWrapper 类中吗?还是我必须在控制器中显式/手动实例化 ModelStateWrapper 并将 ModelState 作为参数传递?

提前致谢!

【问题讨论】:

标签: asp.net-mvc dependency-injection asp.net-mvc-3 ioc-container dependency-management


【解决方案1】:

我认为你需要将你的 modelstatewrapper 类移动到一个公共程序集中。您可以从服务层、业务逻辑层等引用此公共程序集。公共程序集可以包含您的域类、dto、服务定义等您创建一个引导程序类,它将公共程序集中的所有类型注册到您的容器中。从服务、BL 层等调用此引导程序。

希望对你有帮助

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-02
    • 2013-01-30
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    相关资源
    最近更新 更多