非 Service/Non 控制器和 IOC 中的 ServiceStack IServiceGateway

ServiceStack IServiceGateway in Non Service/Non Controller and IOC

我有一个控制台应用程序,其中包含 hangfire 和服务堆栈服务。 Hangfire 有自己的 IOC 适配器实现,已集成到 Funq 适配器中。我正在尝试使用 IGatewayService 来调用 inproc 服务。

网关始终为空。

public class Tests
{
    public IServiceGateway gateway { get; set; }
    public Tests()
    {
        gateway =  HostContext.TryResolve<IServiceGateway>(); //tried this along with every type of registration

    }
    public void Test3() {
       // I want to use gateway here to call an inproc service
    }
}

我试过:

Container.Register<IServiceGatewayFactory>(x => new TestServiceGatewayFactory())
            .ReusedWithin(ReuseScope.None);

            Container.Register<Tests>(new Tests() { gateway = Container.Resolve<IServiceGateway>() });

和其他一些非 funq 适配器和网关始终为空。我可以在寄存器 new TestServiceGateway() 中创建网关,但它需要一个 IRequest。如果我在那里传递 null 它也不会起作用。

hangfire调用很简单:

RecurringJob.AddOrUpdate<Tests>((t) => t.Test3(), Cron.Yearly(12, 12));

获取服务网关的API是:

HostContext.AppHost.GetServiceGateway(Request);

其中 Request 是 ServiceStack IRequest,您可以从 ServiceStack 外部的 ASP.NET 请求创建它:

var request = HttpContext.Current.ToRequest();

或者您可以创建模拟请求:

var request = new MockHttpRequest();