, benim yarattığım şu Autofac yapılandırma gibi aşağıdaki şey kullanın yapmak olduğunu :
basit bir konteyner sınıfı "geçerli" bir referans HttpRequestMessage
tutmak için WebAPI yapılandırırken akım isteği Global.asax, içinde
public class CurrentRequestHandler : DelegatingHandler
{
protected async override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
var scope = request.GetDependencyScope();
var currentRequest = (CurrentRequest)scope.GetService(typeof(CurrentRequest));
currentRequest.Value = request;
return await base.SendAsync(request, cancellationToken);
}
}
depolayacak
public class CurrentRequest
{
public HttpRequestMessage Value { get; set; }
}
bir ileti işleyicisi, ileti işleyicisi ekleyin.
GlobalConfiguration.Configuration.MessageHandlers.Insert(0, new CurrentRequestHandler());
Ardından,
CurrentRequest
nesneden Mevcut isteği alma,
UrlHelper
inşa izin Autofac kabı yapılandırın.
var builder = new ContainerBuilder();
builder.RegisterType<CurrentRequest>().InstancePerApiRequest();
builder.Register(c => new UrlHelper(c.Resolve<CurrentRequest>().Value));
builder.RegisterType<MyService>();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
...
container = builder.Build();
UrlHelper
sonra tıpkı diğer bağımlılık gibi
MyService
içine enjekte edilebilir.
Darrel'i bana doğru yönde işaret ettiğin için sağol.
biz WebAPIBook üzerinde çalıştığımız ne bir göz atın, bu olası bir çözümü vardır Bu soruna ... https://gist.github.com/glennblock/8f18bdee15eec9c1af70 –
Ah, evet, çok güzel. Bunu çözmek için bir mesaj işleyicisi oluşturmayı düşünüyordum :) Bir şans vereceğim. Teşekkürler. –