2012-05-19 4 views
6

Nop Commerce과 협력 중이며 누군가 내 혼란을 도와 줄 수 있는지 궁금합니다.Nop Commerce 설정이 데이터베이스에서로드되는 방식 이해

웹 응용 프로그램을 시작할 때 설정이로드되는 방식을 알아 내려고 여러 번 코드를 디버깅했습니다. 나는 단지 그것을 얻지 않는다!

모든 설정 클래스는 ISettings 인터페이스를 구현합니다. 예를 들어 고객 설정을 할 수있게 해줍니다. CustomerSettings 클래스로 나타났습니다. 데이터베이스에는 Setting table이 있습니다. 고객 설정에 대한 데이터는이 같은 somethng 보이는 :

customersettings.usernamesenabled 
customersettings.checkusernameavailabilityenabled 
customersettings.allowuserstochangeusernames 
... and so on... 

방법과 CustomerSettings 클래스와 CustomerSettings 클래스의 UsernamesEnabled 속성에 매핑 usernamesenabled 같은 속성에 customersettings에서 매핑이 각 설정은? 왜이 방법으로 구현 되었습니까? 누군가가 올바른 방향으로 날 지점 수 있다면

builder.RegisterGeneric(typeof(ConfigurationProvider<>)).As(typeof(IConfigurationProvider<>)); 
builder.RegisterSource(new SettingsSource()); 

다음 주시면 감사하겠습니다 :

나는 그것이 DependencyRegistrar 클래스에 다음 코드를 함께 할 수있는 뭔가가 알고있다.

답변

7

희망이 없습니다.

는 구조가 생성되는 방법을 이해하는 것이보고 몇 관련 사항이 있습니다

-Nop.Services.Configuration.ConfigurationProvider class 
-Nop.Services.Configuration.ISettingsService interface 
-Nop.Services.Configuration.SettingsService class 

SettingsService 만 저장소에서 설정을 저장하고 검색하는 기능을 제공하고, 일부 캐싱 기능을 구현합니다.

ConfigurationProvider는 실제 마법을 수행합니다.

의이 BuildConfiguration 방법을 살펴 보자 :

 // get properties we can write to 
     var properties = from prop in typeof(TSettings).GetProperties() 
         where prop.CanWrite && prop.CanRead 
         let setting = _settingService.GetSettingByKey<string>(typeof(TSettings).Name + "." + prop.Name) 
         where setting != null 
         where CommonHelper.GetNopCustomTypeConverter(prop.PropertyType).CanConvertFrom(typeof(string)) 
         where CommonHelper.GetNopCustomTypeConverter(prop.PropertyType).IsValid(setting) 
         let value = CommonHelper.GetNopCustomTypeConverter(prop.PropertyType).ConvertFromInvariantString(setting) 
         select new { prop, value }; 

반사를 사용하여 (예를 들어, CustomerSettings) * 설정 클래스, 검사와 그 속성은 서비스에서 해당 설정을로드하는 데 사용됩니다. (

properties.ToList().ForEach(p => p.prop.SetValue(Settings, p.value, null));

다른 방법, SaveSettings :

이 그렇다면 (당신이 직렬화가 발생하는 방법을 볼 수 NopCustomTypeConverter를 확인하실 수 있습니다)과 설정 엔티티에 다시에 할당 문자열로 저장된 값을 다시 변환 TSettings 설정)은 설정 엔티티를 가져 와서 ClassName + Propertyvalues ​​형식의 키 - 값 쌍을 생성합니다.

IoC, segregation of interfaces, n-tier 및 유지 관리 (API 기반 구성 요소 화, 테스트 가능성 ecc)를 보장하는 다른 패턴.

+0

예 감사 드리며 이것을 알아 냈습니다. –

관련 문제