2016-03-22 12 views
0

Castle DictionaryAdapterFactoryを使用し、コード全体で文字列を使用せずにアプリケーションapp.settingキーにアクセスするためのインターフェイスについて説明しているthisサイトのチュートリアルに従っています。城にメソッドを追加するDictionaryAdapterFactoryインターフェイス

それが動作する方法は、あなたが次にインターフェイスとあなたのapp.settings辞書間のコーディングを行うためにDictionaryAdapterFactoryを使用して、あなたのapp.settingsためのキー名

public interface ISettings 
    { 
    string dog { get; } 
    string cat { get; } 
    } 

を持つインタフェースを定義しています。

var factory = new DictionaryAdapterFactory();      
var settings = factory.GetAdapter<ISettings>(ConfigurationManager.AppSettings); 

今、あなたがこのような値にアクセスすることができます

settings.dog 
settings.cat 

私の質問ですが、それは簡単なゲッターより複雑以上の何かを持っていることが可能です。たとえば、DictionaryAdapterFactoryに、キーの1つの値に復号化メソッドを使用して、キー値の代わりにその値を返すように指示できますか?

私はインターフェイスでメソッドを定義することはできないが、私が見逃していた別の方法があるかどうかを知りたいので、これは不可能であると仮定しています。

答えて

0

ラッパークラスを使用して、カスタムメソッドを実装するクラスにインターフェイスをラップすることができます。

[AppSettingWrapper] 
public interface ISettings 
{ 
string dog { get; } 
string cat { get; } 
} 

AppSettingWrapperクラスは以下のクラスで定義され、あなたがゲッターと設定でやりたいことができます:

あなたのインターフェイス上で[AppSettingWrapper]を追加します。

public class AppSettingWrapperAttribute : DictionaryBehaviorAttribute, IDictionaryKeyBuilder, IPropertyDescriptorInitializer, IDictionaryPropertyGetter 
{ 
    public string GetKey(IDictionaryAdapter dictionaryAdapter, string key, PropertyDescriptor property) 
    { 
     return key; 
    } 

    public object GetPropertyValue(IDictionaryAdapter dictionaryAdapter, string key, object storedValue, PropertyDescriptor property, bool ifExists) 
    { 
     return storedValue; 
    } 

    public void Initialize(PropertyDescriptor propertyDescriptor, object[] behaviors) 
    { 
     propertyDescriptor.Fetch = true; 
    } 

}

このソリューションの大半は、https://gist.github.com/kkozmic/7858f4e666df223e7fc4から来ています。

関連する問題