首页 > 解决方案 > 创建没有构造函数注入或 ServiceLocator 的具有依赖关系的类的实例

问题描述

我有一个用 Autofac 注册的包装类 SessionData,它的构造函数中注入了 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;
  }
}

标签: c#asp.net-coredependency-injectionautofac

解决方案


推荐阅读