Ninject:获取服务并不适用于我的业务层

时间:2016-04-19 10:29:12

标签: c# dependency-injection ninject ninject.web.mvc

我经常搜索以解决问题,但没有解决方案,我是DI和Ninject的新手。

我的问题是我可以在WebUi层获得我的服务,但我无法在业务层获得我的服务。

此代码在我的WebUi中工作,但它在我的业务层中不起作用:

public IValidator<T> GetValidator<T>(T entity)
{
    var d = kernel.Get<IValidator<T>>();
    return d;
}

我在业务层中收到此错误:

  

激活IValidator时出错{Type}没有匹配的绑定可用,   并且类型不可自我绑定。激活路径:1)请求   IValidator {类型}

     

建议:1)确保您已为其定义了绑定   IValidator {类型}。 2)如果在模块中定义了绑定,请确保   该模块已加载到内核中。 3)确保你有   不小心创建了多个内核。 4)如果你正在使用   构造函数参数,确保参数名称匹配   构造函数参数名称。 5)如果您使用的是自动模块   加载,确保搜索路径和过滤器正确无误。

这是我的代码:

我的界面:

public interface IValidationService
{
    ValidationState Validate<T>(T model);
}

我的具体课程:

public class ValidationService : IValidationService
{
    private readonly IKernel kernel;
    public ValidationService(IKernel kernel)
    {
        this.kernel = kernel;
    }

    public ValidationState Validate<T>(T model)
    {
        var validator = kernel.Get<IValidator<T>>();
        if (validator == null) // or just return null?
            throw new Exception(string.Format("No validator found for type                 ({0})", model.GetType()));

        return validator.Validate(model);
    }

}

和我的约束力:

kernel.Bind<IValidationService>().To<ValidationService>();

1 个答案:

答案 0 :(得分:1)

经过长时间的检查,我遇到了问题。

我做到了这一点,我的问题消失了:

false