Я знаю, что службы подключаются, создавая экземпляр BasicAppHost и IoC, используя свойство ConfigureContainer, но где это место для добавления фильтров? Испытание на вопрос никогда не сгореть глобального фильтра:Фильтры запроса запускаются из BasicAppHost?
[TestFixture]
public class IntegrationTests
{
private readonly ServiceStackHost _appHost;
public IntegrationTests()
{
_appHost = new BasicAppHost(typeof(MyServices).Assembly)
{
ConfigureContainer = container =>
{
//
}
};
_appHost.Plugins.Add(new ValidationFeature());
_appHost.Config = new HostConfig { DebugMode = true };
_appHost.GlobalRequestFilters.Add(ITenantRequestFilter);
_appHost.Init();
}
private void ITenantRequestFilter(IRequest req, IResponse res, object dto)
{
var forTennant = dto as IForTenant;
if (forTennant != null)
RequestContext.Instance.Items.Add("TenantId", forTennant.TenantId);
}
[TestFixtureTearDown]
public void TestFixtureTearDown()
{
_appHost.Dispose();
}
[Test]
public void CanInvokeHelloServiceRequest()
{
var service = _appHost.Container.Resolve<MyServices>();
var response = (HelloResponse)service.Any(new Hello { Name = "World" });
Assert.That(response.Result, Is.EqualTo("Hello, World!"));
}
[Test]
public void CanInvokeFooServiceRequest()
{
var service = _appHost.Container.Resolve<MyServices>();
var lead = new Lead
{
TenantId = "200"
};
var response = service.Post(lead); //Does not fire filter.
}
}
ServiceStack установлен на 4.0.40
Обновлено Ознакомившись с ServiceStack тесты (которые я очень рекомендую BTW) я наткнулся на несколько примеров из AppHost используется И тестируется. Похоже, что свойство ConfigureAppHost - это подходящее место для настройки фильтров, например.
ConfigureAppHost = host =>
{
host.Plugins.Add(new ValidationFeature());
host.GlobalRequestFilters.Add(ITenantRequestFilter);
},
ConfigureContainer = container =>
{
}
Updated1 И они до сих пор не срабатывают.
Updated2
После небольшого количества проб и ошибок я думаю, можно с уверенностью сказать, что NO, фильтры не зацепили при использовании BasicAppHost. То, что я сделал, чтобы решить мою проблему, заключалось в том, чтобы переключить эти тесты на использование класса, который наследуется от AppSelfHostBase, и использовать клиентов cic servicestack для вызова методов моей службы. ЭТО приводит к тому, что глобальные фильтры будут выполнены.
Спасибо, Стефане