use*_*899 3 c# autofac asp.net-web-api
我这样做:https : //stackoverflow.com/questions/12069002/autofac-resolve-with-and-without-named-parameter
我注册了一个接口。对于初始化,需要一个参数。第一次调用将传递此参数。
在另一个地方,我也想解析这个接口实例,但我不能传递这个参数。是否可以检查此接口是否已解析(在当前范围内。我使用 ASP.NET WEB API)?如果我在没有参数的情况下解决它,我会得到一个例外。
我需要检查当前 HttpRequest-scope 中是否已经解析(所以我可以在不传递参数的情况下获取它,因为如果它已经解析,注册的创建委托将不会被调用两次)
m_builder.Register<IMyClass((c, p) =>
{
//...
return new MyClass;
}).InstancePerHttpRequest();//.InstancePerApiRequest();
Run Code Online (Sandbox Code Playgroud)
首先,创建一个可以跟踪实例是否已解析的类:
public class Tracker
{
public bool IsResolved { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
(您可能希望稍微修饰一下:))
使用与您要跟踪的任何内容相同的范围注册它:
builder.RegisterType<Tracker>()
.InstancePerHttpRequest();
Run Code Online (Sandbox Code Playgroud)
然后,在OnActivated事件中,设置布尔值:
builder.Register((c, p) => {
return new MyClass();
})
.As<IMyClass>()
.InstancePerHttpRequest()
.OnActivated(e => {
e.Context.Resolve<Tracker>().IsResolved = true;
});
Run Code Online (Sandbox Code Playgroud)
您也可以在激活期间(在第一个委托中)设置该字段,但OnActivated如果您愿意,使用该事件可以更容易地概括这一点。
最后,检查字段:
if (container.Resolve<Tracker>().IsResolved) { ... }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2139 次 |
| 最近记录: |