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