在MVC过滤器中设置IBus属性

时间:2013-04-23 21:31:59

标签: asp.net-mvc-4 aop structuremap nservicebus nservicebus3

我试图将我的MVC4项目中的过滤器命令发送到我的命令处理器。

问题:
我无法在过滤器中获得NServiceBus实例来填充。

组件:

  • ASP.NET MVC 4
  • NServiceBus第3版
  • StructureMap

属性/过滤器:

namespace AMS.WebApp.Filters
{
    public class AMSAuthorizeAttribute : AuthorizeAttribute
    {
        public IBus Bus { get; set; }
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            bool accessGranted = false;

            accessGranted = base.AuthorizeCore(httpContext);


            // arbitrary command, don't worry about it
            // Why is Bus still null?
            var requestAccess = new RequestingAccess();
            Bus.Send("AMS.AccessControl.CommandProcessor", requestAccess);

            //if(isAdmin)
            //  accessGranted = true;

            #if DEBUG
                accessGranted = true;
            #endif

            return accessGranted;
        }
    }
}

国际奥委会代码:

using AMS.WebApp.Filters;
using NServiceBus;
using StructureMap;
namespace AMS.WebApp.DependencyResolution {
    public static class IoC {
        public static IContainer Initialize() {
            ObjectFactory.Initialize(x =>
                        {
                            x.Scan(scan =>
                                    {
                                        scan.AssembliesFromApplicationBaseDirectory();
                                        scan.WithDefaultConventions();
                                    });

                            //This doesn't work
                            //x.SetAllProperties(y => y.OfType<IBus>());  

                            //Neither does this                            
                            //x.ForConcreteType<AMSAuthorizeAttribute>()
                            // .Configure
                            // .Setter<IBus>(a => a.Bus)
                            // .IsTheDefault();
                        });
            return ObjectFactory.Container;
        }
    }
}

此外,我尝试通过从控制器传入总线实例来完全绕过结构图,导致:

An object reference is required for the non-static field, method, or property

此时我很确定它的属性/过滤器和结构图有些尴尬,但我不确定那是什么。

警告:接受的答案并不能解决在动作过滤器中获取nservicebus的实际问题,但它确实解决了如何在动作过滤器中获取DI。有关Nservicebus特定问题,请参阅ASP.NET MVC4 NServiceBus Attribute/Filter StructureMap

1 个答案:

答案 0 :(得分:0)

看一下这篇文章。我认为这就是你要找的东西。

http://lostechies.com/jimmybogard/2010/05/03/dependency-injection-in-asp-net-mvc-filters/

编辑:

我认为你有两个不同的问题。

  1. 在过滤器上使用DI
  2. 在NServiceBus上配置DI
  3. 您能否发布为StructMap初始化NServiceBus的代码?

    你正在寻找这样的事情:

    Configure.With()。StructureMapBuilder()