【问题标题】:Razor Pages 3.1 configuration injection into classRazor Pages 3.1 配置注入类
【发布时间】:2020-06-10 22:21:30
【问题描述】:

配置注入在我保存代码的简单类(不是从 PageModel 继承)中不起作用

尽管有这段代码:

private readonly IConfiguration _configuration;

public MyClass(IConfiguration configuration){
_configuration = configuration;
}

一旦初始化为对象的类总是要求参数configuration,该参数应由框架注入。这就是 Razor Pages 的工作原理——继承自 PageModel 的类。

Program.csStartup.cs 中的所有配置都是由 Visual Studio 创建的标准配置。我使用 Visual Studio 16.4.5 和 ASP.NET Core 3.1。

我怎样才能做到这一点?

【问题讨论】:

  • 您没有使用强类型配置有什么特别的原因吗?
  • 只是玩和学习 RazorPages,需要从appsettings.json 加载一个字符串(数据库连接)。一旦将相同的代码放入 RazorPage,而不是纯类,一切正常。
  • 与任何服务类型一样,只要在您的服务提供者中设置了IConfiguration,它就应该由.GetService()返回,并提供给其他已配置服务的任何构造函数。
  • 明天将提供更多代码,因为我不明白。

标签: c# asp.net-core razor-pages


【解决方案1】:

您也可以尝试使用[inject] 属性,如下所示:

    [Inject]
    private IConfiguration Config { get; set; }

这应该将您的 IConfiguration 注入到您的类中的一个属性中。

【讨论】:

    【解决方案2】:

    如果您在自定义类中注入 IConfiguration,您可以将您的类注册到 DI 中,以便帮助解决依赖关系:

    services.AddTransient<CustomClass>();
    

    然后在你想使用自定义类的地方定义实例,例如在索引页面中:

    private readonly ILogger<IndexModel> _logger;
    private CustomClass _myClass;
    public PrivacyModel(ILogger<IndexModel> logger, CustomClass myClass)
    {
        _logger = logger;
        _myClass = myClass;
    }
    
    public void OnGet()
    {
        var connectString=   _myClass.getConnectString();
    }
    

    你的班级:

    public class CustomClass
    {
        private IConfiguration _configuration;
    
        public CustomClass(IConfiguration configuration) {
            _configuration = configuration;
    
        }
    
        public string getConnectString() {
    
            return  _configuration.GetValue<string>("ConnectionStrings:DefaultConnection"); ;
        }
    }
    

    【讨论】:

    • 这行得通,但是您提供了将 CustomClass 注入 RazorPage 的选项。仅出于学习目的,我想通过CustomClass CustomClassObject = new CustomClass();string conn = CustomClassObject.getConnectString();执行自定义类的方法,但是CustomClass无法访问IConfiguration,因此new CustomClass()要求提供参数。
    • 换句话说,作为一种概括,我正在寻找一种方法将IConfiguration 直接注入CustomClass 以读取其中的配置,就像可以从 Razor 页面完成一样。这样,我就不需要担心 Razor Page 的任何内容,因为所有内容都将封装在 CustomClass
    • 最终理解了整个概念。接受作为解决方案。
    猜你喜欢
    • 2021-09-25
    • 2021-05-24
    • 2021-04-28
    • 2020-11-23
    • 2021-01-20
    • 1970-01-01
    • 2021-03-01
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多