У меня возникли проблемы с получением экземпляра IBus в фильтре действий (атрибуте).ASP.NET MVC4 NServiceBus Attribute/Filter StructureMap
От Setting IBus Property in MVC Filter, я знаю, что фильтры DI и действий не играют хорошо, и я заставил их играть хорошо, используя принятый ответ. Проблема в том, что получение DI и фильтров действий для воспроизведения приятных разрывов NServiceBus.
В том же вопросе было предложено Джоном посмотреть решение для видео-магазина, чтобы посмотреть, как это сделать. Есть две проблемы с этим ответом:
- Он полностью игнорирует тот факт, что я использую StructureMap.
- Что еще более важно, используя этот образец, когда я добавил свой собственный полученный фильтр полномочий (см. Ниже), экземпляр IBus по-прежнему не заполняется.
Это предположение с моей стороны, но я не думаю, что запеченный в контейнере DI, который NServiceBus может обрабатывать DI в фильтр действий.
//NOTE:
//I added a Filters folder to the project, and stuck this class in there
//This filter will disable authentication when debugging
//Add the attribute to the home controller, and
//If you put a break point at the beginning, IBus doesn't get filled
using NServiceBus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace VideoStore.ECommerce.Filters
{
public class AMSAuthorizeAttribute : AuthorizeAttribute
{
public IBus Bus { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool accessGranted = false;
accessGranted = base.AuthorizeCore(httpContext);
//if(isAdmin)
// accessGranted = true;
#if DEBUG
accessGranted = true;
#endif
return accessGranted;
}
}
}
Когда я следуйте инструкциям, указанным в Setting IBus Property in MVC Filter, я получаю эту ошибку StructureMap Exception Code: 202 No Default Instance defined for PluginFamily NServiceBus.Unicast.Subscriptions.ISubscriptionStorage, NServiceBus.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c
Вы сказали NServiceBus использовать StructureMap в качестве внутреннего контейнера? См. Http://support.nservicebus.com/customer/portal/articles/852357 –
Да, все работает нормально, пока я не пытаюсь использовать NServiceBus в фильтре. Я могу заставить NServiceBus работать с StructureMap, и я могу заставить StructureMap выполнять функцию Injection в фильтре, но попытка заставить StructureMap вводить NServiceBus в фильтр действий не работает. –
Извините, не знаю! –