管理构造函数依赖注入(MS Unity)

时间:2011-02-27 16:42:08

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

我正在构建一个多层应用程序,并尝试尽可能多地保留层,因此我正在使用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作为参数传递?

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

我希望这会有所帮助

问候