我试图将我的MVC4项目中的过滤器命令发送到我的命令处理器。
问题:
我无法在过滤器中获得NServiceBus实例来填充。
组件:
属性/过滤器:
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
答案 0 :(得分:0)
看一下这篇文章。我认为这就是你要找的东西。
http://lostechies.com/jimmybogard/2010/05/03/dependency-injection-in-asp-net-mvc-filters/
编辑:
我认为你有两个不同的问题。
您能否发布为StructMap初始化NServiceBus的代码?
你正在寻找这样的事情:
Configure.With()。StructureMapBuilder()