- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试获得一个事务 ID,它将用于在整个请求过程中进行日志记录。交易 ID 是 AuditContext 中的一个属性,而每个请求又是一个单例。我在 Global.asax.cs 中有以下代码
builder.RegisterType<AuditContext>().As<IAuditContext>().InstancePerRequest();
....
GlobalContainer = builder.Build();
config.DependencyResolver = new AutofacWebApiDependencyResolver(GlobalContainer);
交易 ID 在基础 api 类中设置。
public BaseApiController(IAuditContext auditContext, IDispatcher dispatcher = null)
{
auditContext.TransactionID = Guid.NewGuid().ToString();
}
在下面的构造函数注入(inject)用法中注入(inject)具有正确事务 ID 的 AuditContext 对象。
public class SapEventLogger : ISapEventLogger
{
private IAuditContext auditContext;
public SapEventLogger(IAuditContext auditContext)
{
this.auditContext = auditContext; //this auditContext object has correct transaction ID
}
}
如果出现任何异常,我想检索交易 ID 并将其记录下来。但是当我尝试手动解析时,我得到一个新的 AuditContext 对象,其中事务 ID 为空。
public class ServiceExceptionHandler : ExceptionHandler
{
public override void Handle(ExceptionHandlerContext context)
{
using (var scope = GlobalContainer.BeginLifetimeScope(Autofac.Core.Lifetime.MatchingScopeLifetimeTags.RequestLifetimeScopeTag))
{
var auditContext = scope.Resolve<FDP.Services.Common.IAuditContext>();
transactionID = auditContext.TransactionID; //Transaction ID is null here
}
}
}
不确定为什么在手动解析 AuditContext 时创建新对象。我错过了什么吗?
最佳答案
通过 BeginLifetimeScope
调用,您可以手动创建第二个 请求生命周期,而不是使用现有的请求生命周期。两个请求生命周期等于两个实例。
The solution to this is outlined in the Autofac docs in more detail但简短的版本是从处理程序上下文中的请求消息中获取请求生命周期:
// Get the request lifetime scope so you can resolve services.
var requestScope = context.Request.GetDependencyScope();
// Resolve the service you want to use.
var auditContext = requestScope.GetService(typeof(IAuditContext)) as IAuditContext;
// Do the rest of the work in the filter.
auditContext.DoWork();
关于c# - 手动解析 InstancePerRequest 类型时未收到 Autofac 相同的注入(inject)实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40507762/
在我们的数据库表上,我们使用两个唯一的非聚集索引来创建跨四个字段的唯一约束。我们使用两个,因为其中一个字段 ZipCode 是一个可为空的字段。如果表中存在一条包含 ZipCode 的 null 条目
我刚刚开始学习 Rails 3 教程,以便对框架有一点熟悉,但我在生成 schema.rb 时遇到了问题。我的操作系统是 Windows 7 x64、Ruby 1.9.2、MySQL2 gem 0.2
我是一名优秀的程序员,十分优秀!