2016-03-22 24 views
0

this sitesinde, Castle DictionaryAdapterFactory öğesini ve kodunuzda dizeleri kullanmadan bir uygulama app.setting anahtarına erişmek için kullanılan bir arabirimi izleyen eğiticiyi izliyorum.Kale Sözlüğüne Yöntem EklemeAdapterFactory Arabirimi

Eğer

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

Ardından arayüzüne ve app.settings sözlüğe arasındaki kodlama yapmak DictionaryAdapterFactory kullanın app.settings için anahtar adları olan bir Arabirimi tanımlamak olduğu işler böyle.

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

Şimdi böyle değerlere erişebilir:

settings.dog 
settings.cat 

Sorum şu, bu mümkün basit toplamamaddesi daha karmaşık bir şey daha sahip olmaktır. Örneğin, DictionaryAdapterFactory'a anahtarlardan birinin değeri üzerinde bir şifre çözme yöntemi kullanmasını ve ardından anahtar değeri yerine döndürmesini söyleyebilir miyim?

Bir arabirimde yöntemleri tanımlayamadığınızdan, ancak başka bir yolun eksik olup olmadığını görmek istediğinden bunun mümkün olmadığına inanıyorum.

cevap

0

Arabiriminizi, özel yöntemleri uygulayan bir sınıfla sarmak için bir sarmalayıcı sınıfı kullanabilirsiniz.

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

AppSettingWrapper sınıf aşağıda sınıfında tanımlanır ve size toplamamaddesi ve ortamda istediğini yapalım:

Sen arayüzü üzerinden [AppSettingWrapper] ekleyin. Bu çözümün çoğu

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 geliyor.

İlgili konular