asp.net-mvc - ASP.NET MVC 5 过滤器和注入(inject)

标签 asp.net-mvc ninject inversion-of-control

我有这个 DDD 应用程序,它在 Presentation 上有 MVC,带有 Ninject。

我有 CrossCutting Layer 绑定(bind)来自所有层的注入(inject),它的工作就像一个魅力。

我无法解决的问题是涉及过滤器属性时。我有这个过滤器检查一个 cookie 并根据它的值对数据库执行查询。有了这个架构,我就不能让我的过滤器直接访问我的存储库,这是对我正在应用的方法的不尊重。

我有我的 IFooAppService 接口(interface),它的方法最终会访问存储库以请求数据。我可以在任何 Controller 构造函数中成功注入(inject)它,它会执行我的 _fooAppService.Query(),但是我在我的应用程序中的一些操作上面有这个 XooFilter,我只是不能将我的 _fooAppService 传递给它。这是我的 XooFilter:

public class XooFilter : ActionFilterAttribute
{
    private readonly IFooAppService _fooAppService;

    public XooFilter(IFooAppService fooAppService)
    {
        _fooAppService = fooAppService;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // LOGIC...

        var fooValue = _fooAppService.Query();

        // MORE LOGIC..
    }
}

但是,当我在任何 Action [XooFilter] 上方插入我的过滤器时,它不会起作用。它说过滤器没有包含 0 个元素的构造函数。

我只是不知道如何做得很好并保持 DDD 和 IoC 的特性。我找到了下面的文章,但找不到任何答案:

Injecting dependencies into ASP.NET MVC 3 action filters. What's wrong with this approach?

最佳答案

你可以这样解决你的服务

System.Web.Mvc.DependencyResolver.Current.GetService(typeof (IFooAppService ));

关于asp.net-mvc - ASP.NET MVC 5 过滤器和注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30059891/

相关文章:

c# - 我可以在同一个 ASP.NET MVC 网站上使用一个程序集的两个版本吗?

c# - 使用 Fluentvalidation 显示带有 NotEmpty 的星号

c# - 没有虚拟方法调用的.Net 中的依赖注入(inject)?

c# - 使用构造函数参数 Ninject Get<T>

asp.net-mvc - 如何从我的 _layout View 调用操作方法

ASP.NET MVC 什么线程池用于自定义任务?

asp.net - 我可以在 Orchard CMS 中使用我的 Ninject .NET 项目吗?

c# - 记录 ninject 解决的依赖项应用程序启动

c# - Ninject 基于约定的绑定(bind) + 装饰器

c# - 以松散耦合的方式公开 ILogger