2017-08-18 71 views
1

我一直在玩的新版本的Akka.Net,支持Visual Studio 2017中的.NetStandard 1.6。由於Akka.Net的獨特性.Net配置使用HOCON格式進行配置。以前的版本在app.config或Web.config中嵌入易於閱讀的HOCON配置。另一種選擇是使用接受字符串對象的ConfigurationFactory.ParseString方法。但是從一個字符串解析HOCON對於小配置部分來說很方便。在我的情況下,我離開這個ParseString配置,甚至沒有按預期工作。 我想出了這個:如何使用Appsetting配置Akka.Net 1.3.0在Asp.net核心配置

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?或者有更好的方法來做到這一點?

+0

我現在的解決方法。我創建了一個文件。使其成爲嵌入式資源。然後通過ConfigurationFactory.FromResource加載它(「resoucefilename.txtt」); – vicosoft

+0

目前沒有規範的方法來做到這一點 - 我們正在討論在即將發佈的次要版本中添加一個。 – Aaronontheweb

+0

檢查我的答案在這裏類似的問題:https://stackoverflow.com/questions/36699889/akka-net-asp-net-5-mvc-6-configuration-for-hocon/46568515#46568515 – moyomeh

回答

0

我將hocon轉換爲json並使用ConfigurationFactory.FromObject和一些具有我感興趣的屬性的類從appsettings讀取akka-config。匿名對象模擬hocon根。

var config = ConfigurationFactory.FromObject(new { akka = configuration.GetSection("Akka").Get<AkkaConfig>() }); 

actorSystem = ActorSystem.Create("Stimpy", config); 

請注意,我一直沒有弄清楚如何從appsettings解析kebab-case屬性。所以我剛剛重命名了連字符以外的屬性。然後將JsonProperty屬性設置爲正確的名稱,以便FromObject可以正確地反序列化它。

public class AkkaConfig 
{ 
    [JsonProperty(PropertyName = "log-config-on-start")] 
    public string logconfigonstart { get; set; } 
    [JsonProperty(PropertyName = "stdout-loglevel")] 
    public string stdoutloglevel { get; set; } 
    public string loglevel { get; set; } 
    public string[] loggers { get; set; } 
    public ActorConfig actor { get; set; } 

    public class ActorConfig 
    { 
     public DebugConfig debug { get; set; } 
     public Dictionary<string, string> serializers { get; set; } 
     [JsonProperty(PropertyName = "serialization-bindings")] 
     public Dictionary<string, string> serializationbindings { get; set; } 

     public class DebugConfig 
     { 
      public string receive { get; set; } 
      public string autoreceive { get; set; } 
      public string lifecycle { get; set; } 
      [JsonProperty(PropertyName = "event-stream")] 
      public string eventstream { get; set; } 
      public string unhandled { get; set; } 
     } 
    } 
} 

appsettings.json:

{ 
    "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" 
     } 
    } 
    } 
} 
相關問題