C# Autofac:检查实例是否已解析
我这样做: 我注册了一个接口。对于初始化,需要一个参数。 第一次调用将传递此参数 在另一个地方,我也想解析接口的这个实例,但我不能传递这个参数。 是否可以检查此接口是否已解析(在当前范围内。我使用ASP.NET WEB API)? 如果我在没有参数的情况下解析它,我会得到一个异常 我需要检查当前HttpRequest范围中是否已经解析了(这样我就可以在不传递参数的情况下获得它,因为如果已经解析了,那么注册的创建委托将不会被调用两次)C# Autofac:检查实例是否已解析,c#,asp.net-web-api,autofac,C#,Asp.net Web Api,Autofac,我这样做: 我注册了一个接口。对于初始化,需要一个参数。 第一次调用将传递此参数 在另一个地方,我也想解析接口的这个实例,但我不能传递这个参数。 是否可以检查此接口是否已解析(在当前范围内。我使用ASP.NET WEB API)? 如果我在没有参数的情况下解析它,我会得到一个异常 我需要检查当前HttpRequest范围中是否已经解析了(这样我就可以在不传递参数的情况下获得它,因为如果已经解析了,那么注册的创建委托将不会被调用两次) m_builder.Register { //... 返回新
m_builder.Register
{
//...
返回新的MyClass;
}).InstancePerhtPrequest();/。InstancePerApiRequest();
首先,创建一个可以跟踪实例是否已解析的类:
public class Tracker
{
public bool IsResolved { get; set; }
}
(你可能希望把它修饰一下:))
将其注册到与要跟踪的内容相同的范围:
builder.RegisterType<Tracker>()
.InstancePerHttpRequest();
您也可以在激活期间(在第一个委托中)设置该字段,但如果您愿意,使用激活的OnActivated
事件可以更容易地进行概括
最后,要检查字段:
if (container.Resolve<Tracker>().IsResolved) { ... }
if(container.Resolve().IsResolved){…}
builder.Register((c, p) => {
return new MyClass();
})
.As<IMyClass>()
.InstancePerHttpRequest()
.OnActivated(e => {
e.Context.Resolve<Tracker>().IsResolved = true;
});
if (container.Resolve<Tracker>().IsResolved) { ... }