.net core 如何在Asp.Net core中为Akka.Net 1.3.0配置使用Appsetting配置

.net core 如何在Asp.Net core中为Akka.Net 1.3.0配置使用Appsetting配置,.net-core,visual-studio-2017,akka.net,.net-standard,.net Core,Visual Studio 2017,Akka.net,.net Standard,我一直在使用visual studio 2017中支持.NetStandard 1.6的新版本Akka.Net。由于Akka.Net配置的特殊性,它使用HOCON格式进行配置。以前的版本在app.config或Web.config中嵌入了易于阅读的HOCON配置。另一个选项是使用接受字符串对象的ConfigurationFactory.ParseString方法。但是从字符串解析HOCON对于小的配置部分来说很方便。在我的例子中,我只剩下这个ParseString配置,它甚至没有按预期工作。 我

我一直在使用visual studio 2017中支持.NetStandard 1.6的新版本Akka.Net。由于Akka.Net配置的特殊性,它使用HOCON格式进行配置。以前的版本在app.config或Web.config中嵌入了易于阅读的HOCON配置。另一个选项是使用接受字符串对象的ConfigurationFactory.ParseString方法。但是从字符串解析HOCON对于小的配置部分来说很方便。在我的例子中,我只剩下这个ParseString配置,它甚至没有按预期工作。 我想到了这个:

 var configString = @"akka {
        log-config-on-start = on
        stdout-loglevel = INFO
        loglevel = DEBUG
        loggers= ""[Akka.Logger.Serilog.SerilogLogger, Akka.Logger.Serilog]""
        actor {

                    debug {
                        receive = on
                        autoreceive = on
                        lifecycle = on
                        event-stream = on
                        unhandled = on
                    }
              }

    akka.persistence {
        journal {
                    plugin = ""akka.persistence.journal.sqlite""

                    sqlite {
                                    class = ""Akka.Persistence.Sqlite.Journal.SqliteJournal, Akka.Persistence.Sqlite""
                                        plugin-dispatcher = ""akka.actor.default-dispatcher""
                                        connection-string = ""Data Source = F:\\SqliteDb\\Sample.db3""
                                      table-name = event_journal
                                    metadata-table-name = journal_metadata
                                    auto-initialize = on

                            }
                    }

    snapshot-store {
        plugin = ""akka.persistence.snapshot-store.sqlite""
        sqlite {
            class = ""[Akka.Persistence.Sqlite.Snapshot.SqliteSnapshotStore, Akka.Persistence.Sqlite]""
            connection-string = ""Data Source = F:\\SqliteDb\\Sample.db3""
            table-name = snapshot_store
            auto-initialize = on

        }
}

}

     ";
        var config = ConfigurationFactory.ParseString(configString);
         ActorSystem.Create("AkkaSystem", config);
这并没有像预期的那样起作用。
我们如何使用appsetting.json在Asp.net核心中配置akka.net?或者有更好的方法吗?

我将hocon转换为json,并使用ConfigurationFactory.FromObject和一些具有我感兴趣的属性的类从appsettings读取akka配置。匿名对象模拟hocon根

var config=ConfigurationFactory.FromObject(新的{akka=configuration.GetSection(“akka”).Get();
actorSystem=actorSystem.Create(“Stimpy”,config);
请注意,我并没有费心去弄清楚如何从appsettings解析烤肉串案例属性。因此,我刚刚重命名了不包括连字符的属性。然后将JsonProperty属性设置为正确的名称,以便FromObject可以正确地反序列化它

public类AkkaConfig
{
[JsonProperty(PropertyName=“启动时日志配置”)]
公共字符串logconfigonstart{get;set;}
[JsonProperty(PropertyName=“stdout loglevel”)]
公共字符串stdoutloglevel{get;set;}
公共字符串日志级别{get;set;}
公共字符串[]记录器{get;set;}
public ActorConfig actor{get;set;}
公共类ActorConfig
{
公共DebugConfig调试{get;set;}
公共字典序列化程序{get;set;}
[JsonProperty(PropertyName=“序列化绑定”)]
公共字典序列化绑定{get;set;}
公共类DebugConfig
{
公共字符串接收{get;set;}
公共字符串自动接收{get;set;}
公共字符串生命周期{get;set;}
[JsonProperty(PropertyName=“事件流”)]
公共字符串eventstream{get;set;}
未处理的公共字符串{get;set;}
}
}
}
appsettings.json:


我现在的解决办法。我创建了一个文件。使其成为嵌入式资源。然后通过ConfigurationFactory.FromResource(“resourcefilename.txtt”)加载它;目前还没有一种规范的方法可以做到这一点——我们正在讨论在即将发布的一个小版本中添加一个
{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Trace"
    }
  },
  "Akka": {
    "logconfigonstart":"on",
    "stdoutloglevel":"INFO",
    "loglevel": "DEBUG",
    "loggers": [ "Akka.Logger.NLog.NLogLogger, Akka.Logger.NLog" ],

    "actor": {
      "debug": {
        "receive": "on",
        "autoreceive": "on",
        "lifecycle": "on",
        "eventstream": "on",
        "unhandled": "on"
      },
      "serializers": {
        "hyperion": "Akka.Serialization.HyperionSerializer, Akka.Serialization.Hyperion"
      },
      "serializationbindings": {
        "System.Object": "hyperion"
      }
    }
  }
}