В ASP.NET Core WebRequestLifestyle
называется Scoped
.Вы можете получить его путем «перекрестного подключения» зависимости.Я не уверен, что в Castle уже встроена перекрестная проводка, но в противном случае вы можете добиться этого следующим образом:
public void ConfigureServices(IServiceCollection services)
{
// IHttpContextAccessor is required by the GetRequestService method.
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
// Usual stuff here
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// Cross-wire ASP.NET Core service that needs to be injected
container.Register(Component.For<A>()
.UsingFactoryMethod(_ => app.GetRequiredRequestService<A>()));
// Usual stuff here
}
В этом примере GetRequestService
- это пользовательский метод расширения для IApplicationBuilder
и определяется следующим образом:
public static T GetRequiredRequestService<T>(this IApplicationBuilder builder)
where T : class
{
var accessor = builder.ApplicationServices.GetService<IHttpContextAccessor>();
var context = accessor.HttpContext ?? throw new InvalidOperationException(
"No HttpContext.");
return context.RequestServices.GetRequiredService<T>();
}