Asp.net mvc 4 在MVC筛选器中设置IBus属性

Asp.net mvc 4 在MVC筛选器中设置IBus属性,asp.net-mvc-4,aop,structuremap,nservicebus,nservicebus3,Asp.net Mvc 4,Aop,Structuremap,Nservicebus,Nservicebus3,我正在尝试从MVC4项目中的筛选器向命令处理器发送命令 问题: 我无法在筛选器中获取要填充的NServiceBus实例 组成部分: ASP.NETMVC4 NServiceBus版本3 结构图 属性/过滤器: namespace AMS.WebApp.Filters { public class AMSAuthorizeAttribute : AuthorizeAttribute { public IBus Bus { get; set; }

我正在尝试从MVC4项目中的筛选器向命令处理器发送命令

问题:
我无法在筛选器中获取要填充的NServiceBus实例

组成部分:

  • ASP.NETMVC4
  • NServiceBus版本3
  • 结构图
属性/过滤器:

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;
        }
    }
}
在这一点上,我很确定属性/过滤器和structuremap有些尴尬,但我不确定这是什么


警告:接受的答案并不能解决在操作筛选器中获取nservicebus的实际问题,但它确实解决了如何在操作筛选器中获取DI的问题。有关Nservicebus特定的问题,请参阅,请参阅本帖。我想这就是你要找的

编辑:

我想你们有两个不同的问题

  • 在过滤器上使用DI
  • 在NServiceBus上配置DI
  • 您可以发布您的代码来初始化NServiceBus for StructureMap吗

    你在找这样的东西:


    Configure.With().StructureMapBuilder()

    有趣的是,我认为这可以做到。明天上班时我会试试,如果有用的话,我会记下答案。谢谢这适用于我创建的一个示例项目。我删除了文章中的内容,setter注入不起作用,添加它,setter注入就起作用了。不幸的是,NServiceBus与额外的配置相匹配:StructureMap异常代码:202没有为PluginFamily NServiceBus.Unicast.Subscriptions.ISubscriptionStorage定义默认实例,NServiceBus.Core,Version=3.3.0.0,Culture=neutral,PublicKeyToken=9fc386479f8a226cAs John在下面陈述,确保明确告知NServiceBus使用StructureMap。从您的代码中,我看不到正在执行此步骤。如果您跳过这一步,NSB将使用它的默认值,我认为是AutoFac。这可以解释为什么StructureMap找不到NServiceBus接口。
    An object reference is required for the non-static field, method, or property