我有一个类在其构造函数中需要一个字符串作为参数,但这个参数将由调用代码决定。同时,这个类的生命周期必须与每个 HTTP 请求相关联。因此,我创建了一个自定义 PerWebRequestTimelineManager 并将其用于配置文件中的目标类型。但是由于必须动态确定构造函数中的字符串,所以我不能通过配置文件使用 ConstructorInjection。我可以使用抽象工厂来解决动态依赖的问题,但我不确定实现:你能检查下面的代码并验证方法吗?具体来说,RegisterType 和 Resolve 调用似乎有点不合适,尽管整个应用程序中的连续 Resolve 调用将能够检索相同的实例。:
public class PerformanceTracerFactory : IPerformanceTracerFactory
{
private readonly IPerformanceTracer tracer;
public IPerformanceTracer CreateInstance(string operationTitle)
{
_container.RegisterType<IPerformanceTracer, PerformanceTracer>(new InjectionConstructor(operationTitle));
return _container.Resolve<IPerformanceTracer>();
}
}
配置文件的相关部分:
<register type="IPerformanceTracer" mapTo="PerformanceTracer">
<lifetime type="PerWebRequest"/>
</register>
<register type="IPerformanceTracerFactory" mapTo="PerformanceTracerFactory"/>
我有另一个问题。如果上述使用代码配置和注入依赖项的方式是正确的,那么我认为我不需要配置条目。我总是可以使用合适的重载来推送自定义生命周期管理器。如果我想只使用配置文件来实现同样的事情,那么我该如何编写解决方案呢?