У меня есть класс, которому нужна строка в качестве параметра в его конструкторе, но этот параметр будет определяться вызывающим кодом.В то же время время жизни этого класса должно быть привязано к каждому 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"/>
У меня есть еще один вопрос.В случае, если описанный выше способ настройки и внедрения зависимости с использованием кода является правильным, то я думаю, что мне не нужны записи конфигурации.Я всегда могу использовать подходящую перегрузку, чтобы подтолкнуть пользовательский менеджер времени жизни.В случае, если я хотел бы добиться того же, используя только конфигурационный файл, тогда как мне написать решение?