2016-05-09 2 views
1

DynamoDbを利用するには、アプリケーションで新しいDynamoDbAppSettingsクラスを使用することに決めました。私はそんなに明確ではないよ何カスタムAppSettingクラスをServiceStackのMultiAppSettingクラスに置き換えるにはどうすればよいですか?

public class MyAppSettings : AppSettings 
{ 
    public ApplicationEnvironment Environment 
    { 
     get { return Get("Environment", ApplicationEnvironment.Development); } 
    } 

    public List<string> AdministratorEmails 
    { 
     get { return Get("AdminEmailAddresses", new List<string>()); } 
    } 

    public string CompanyReadConnectionString 
    { 
     get 
     { 
      string settingsName = "CompanyReadConnectionString_{0}".Fmt(Environment); 
      return Get(settingsName, string.Empty); 
     } 
    } 
} 

がMultiAppSettingsへの移行を作成する方法である:我々は現在のAppSettingsから継承するカスタムクラス(下記に示すクラスの一部)を使用しています。例えば、我々は現在、そのように私たちのAppSettingsを登録します。

//Custom App settings 
container.RegisterAutoWired<MyAppSettings>(); 
MyAppSettings appSettings = container.Resolve<MyAppSettings>(); 

そして、私は、カスタムクラスにチェックされているなど、デフォルトのすべてで、非常に簡単に私のアプリの設定にアクセスするのappSettingsの変数を使用することができ、プラス私のアプリケーション全体に散らばっている "魔法の弦"の利点はありません。例として、私は簡単に介して、デバッグモードを取得することができます:

DynamoDBのために
appSettings.DebugMode 

、私が例に示されているもののようなコードを追加しました:

MultiAppSettings multiAppSettings = new MultiAppSettings(
     new DynamoDbAppSettings(
     new PocoDynamo(AwsConfig.CreateAmazonDynamoDb()), true), 
      new MyAppSettings()); 

をしかし、私は仕事をするかは不明ですこの時点でそれと一緒に。上記のようなMultiAppSettingsで動作するカスタムクラスを作成するにはどうすればよいですか?もしそうなら、どうすればそれを登録し、私のアプリの設定にアクセスできますか? MultiAppSetting変数を宣言する際に、既存のカスタムクラスをフォールバックとして使用するのが適切ですか? DynamoDbAppSettingsを扱うためのポインタがあれば、それ以上感謝します。

答えて

1

AWSApps AppHostは例えば、APPHOSTコンストラクタでbase.AppSettingsを割り当てることにより、DynamoDbAppSettingsMultiAppSettingsの使用例を示します。

public AppHost() : base("AWS Examples", typeof(AppHost).Assembly) 
{ 
#if !DEBUG 
    //Deployed RELEASE build uses Config settings in DynamoDb 
    AppSettings = new MultiAppSettings(
     new DynamoDbAppSettings(newPocoDynamo(AwsConfig.CreateAmazonDynamoDb()), 
      initSchema:true), 
     new AppSettings()); 
#endif 
} 

今ちょうど初めて目にあなたのWeb.configの<appSettings/>を見てからbase.AppSettingsプロバイダを置き換えますどの特定のエントリが存在しない場合は、Web.config appSettingsに戻る前にDynamoDBに設定してください。

など。これはpopulate API Keys for each registered AuthProviderからAppHost.Configure()で使用されます。

return new AuthFeature(() => new AuthUserSession(), 
    new IAuthProvider[] 
    { 
     new CredentialsAuthProvider(),    //HTML User/Pass 
     new BasicAuthProvider(),     //HTTP Basic Auth 
     new DigestAuthProvider(AppSettings),  //HTTP Digest Auth 
     new TwitterAuthProvider(AppSettings),  //Twitter 
     new FacebookAuthProvider(AppSettings),  //Facebook 
     new YahooOpenIdOAuthProvider(AppSettings), //Yahoo OpenId 
     new OpenIdOAuthProvider(AppSettings),  //Custom OpenId 
     new GoogleOAuth2Provider(AppSettings),  //Google OAuth2 
     new LinkedInOAuth2Provider(AppSettings), //LinkedIn OAuth2 
     new GithubAuthProvider(AppSettings),  //GitHub OAuth Provider 
    }) 
{ 
    HtmlRedirect = "/awsauth/", 
    IncludeRegistrationService = true, 
}; 

IAppSettingsが自動的ので、あなたのサービスだけで、他の依存関係、例えば同じようにアクセスすることができますFunqに登録されている:あなたの応答のための

public class MyServices : Service 
{ 
    public IAppSettings AppSettings { get; set; } 
} 
+0

感謝を。上記の例では、AppSettingsをMultiAppSettingsに基づいてカスタムクラス、つまりAppSettings = new MyAppSettings(新しいDynamoDbAppSettings(新しいPocoDynamo(AwsConfig.CreateAmazonDynamoDb())、true)) 'に設定します。私はAppSettingsを参照することができますが、コードは自分のカスタムクラスであることを知らない。 '(MyAppSettings)AppSettings.MyProperty'を使用しても機能しません。私は 'var appSettings = AppSettings as MyAppSettings'を使うことができましたが、それは扱いにくいです。助言がありますか? – TortillaCurtain

+0

@TortillaCurtainこれはちょうど普通のC#です。IAppSettingsの背後にある考え方は、あなたのクラスがあなたの具体的なAppSettingsプロバイダを知っているとは思われないので、後でAppSettingソースを、私はあなたの具体的な型にキャストすることを強くお勧めしますが、それをやりたければ、型付き拡張メソッドの背後にあるプロパティへのアクセスを隠すことができます。 – mythz

+0

私の場合は、厳密に型指定されたAppSettingsクラスを持っていて、それや私のコードを混乱させたくありません。私は 'AppAettings'の代わりに' MultiAppSettings'に基づいてこの既存のクラスを作ることを望んでいました。宣言でAppSettingsをMultiAppSettingsに変更すると、魔法の文字列を使用してAppSettingsをどこからでも参照できるようになりますが、今は 'appSettings.Property'を使用するだけで、コンパイル時のエラーについて知ることができます。私はServiceStack 4 Cookbookからラッパーのアイデアを得ましたが、MultiAppSettingsルートに行くとこのメソッドは使用できなくなりましたか? – TortillaCurtain

関連する問題