我有一个包装类SessionData向Autofac注册,该类的构造函数中注入了IHttpContextAccessor。然后,我有一个Parser类,用于用来自不同来源的值替换字符串中的标记,用户可以在代码中的任何位置实例化Parser类的实例,但是Parser使用的IAccessor的一个需要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;
}
}