У меня есть класс-оболочка SessionData, зарегистрированный в Autofac, в котором IHttpContextAccessor вставлен в его конструктор;Затем у меня есть класс Parser, используемый для замены токенов в строке значениями из разных источников, пользователь может создать экземпляр класса Parser в любом месте кода, но одному из IAccessor, используемому Parser, нужен экземпляр SessionData.В устаревшей версии этого кода использовался шаблон ServiceLocator;Я пытаюсь избежать этого любой ценой, я также не хочу использовать инъекцию конструктора, потому что я не хочу, чтобы конструкторы стали неуправляемыми;Кто-нибудь может дать мне какое-то направление?
// пожалуйста, извините за ошибки в псевдокоде, который следует за
// wrapper class to access values stored in Session
public class SessionData {
public SessionData(IHttpConextAccessor) {...}
}
// class used to replace tokens in strings throughout the application
public class Parser {
public Parser() {...}
public string Parse(string value) {
...
foreach(var token in GetTokens(value)) {
if(token.type == "session") {
var accessor = new SessionAccessor();
token.value = accessor.GetValue(token.key)
// replace tokens in value
}
...
// 20 different types of accessors
}
}
}
// interface for all Accessors
public interface IAccessor {
string GetValue(string key);
}
// Accessor to get values from Session
public class SessionAccessor {
SessionData _sessionData;
public SessionAccessor(SessionData sessionData) {
_sessionData = sessionData;
}
}