VS2017,.net core 2.0,webapi,autofac
我需要在我的服务中使用HttpContext并传递一个http标头作为标记来识别用户,这是一个要注入的SessionContext对象。
builder.RegisterType<HttpContextAccessor>().SingleInstance();
builder.Register(context => context.Resolve<LoginService>().GetSession(context.Resolve<HttpContextAccessor>().HttpContext.Request.Headers));
和其他服务都是这样注册的
//Other services
{
IRegistrationBuilder<object, Autofac.Features.Scanning.ScanningActivatorData, DynamicRegistrationStyle> MassiveRegister<T>() => builder.RegisterAssemblyTypes(assembly).InNamespace(baseNamespace + ".Services").AssignableTo<T>().Where(t => t.IsClass && !t.IsGenericTypeDefinition && !t.IsAbstract).PreserveExistingDefaults().OnActivated(e => ((IService)e.Instance).Initialize()).OnActivating(e => e.Context.AutoInjectAll(e.Instance));
MassiveRegister<ISessionalService>().InstancePerLifetimeScope();
MassiveRegister<IService>().SingleInstance();
}
使用Visual Studio正常执行或调试时,它运行正常,
但是当程序发布(在IIS或自主机上)并在Visual Studio中执行时,HttpContextAccessor.HttpContext
总是在其他服务需要SessionContext
时返回null(作为通过调用{{注入的属性) 1}}如下)。
InjectUnsetProperties
我尝试了很多方法,例如改变服务的生命周期,改变构建配置......但它们似乎根本没有帮助。
它真的是一个框架错误,或者我需要一个正确的方法来访问//Called by Startup
public static class AutoDIExtensions
{
public static void AutoInjectAll(this IComponentContext context, object obj)
{
try
{
context.InjectUnsetProperties(obj);
}
catch (DependencyResolutionException ex) when (ex.InnerException.UnpackThrough() is ActionException)
{
throw ex.InnerException;
}
}
}
?