0

MVC4 プロジェクトのフィルターからコマンド プロセッサにコマンドを送信しようとしています。

問題:
フィルターに入力する NServiceBus インスタンスを取得できません。

コンポーネント:

  • ASP.NET MVC 4
  • 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;
        }
    }
}

IOC コード:

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を参照してください。

4

1 に答える 1

0

この投稿を見てください。これがあなたが探しているものだと思います。

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

編集:

ここには2つの異なる問題があると思います。

  1. フィルターで DI を使用する
  2. NServiceBus での DI の構成

StructureMap の NServiceBus を初期化するコードを投稿していただけますか?

あなたはこのようなものを探しています:

Configure.With().StructureMapBuilder()

于 2013-04-24T03:39:00.643 に答える