예 : 다른 DB에 저장된 국가 카탈로그가 있으며 일부 ContentPart의 속성으로 사용해야합니다. Orchard 배선을 많이 방해하지 않고 연결하려고합니다.외부 DB의 카탈로그를 불러와 ContentRecords로 ContentParts에 연결하십시오.
public class MoviePart : ContentPart<MoviePartRecord>
{
public IEnumerable<CountryRecord> Countries
{
get
{
return Record.Countries.Select(r => r.CountryRecord);
}
}
}
CountryRecords MovieParts과의 관계는 오차드 DB에되지만 CountryRecord 데이터는 다른 DB이다. 나는 단지 읽기 접근 만 필요로하지만, 나는 다른 소스를 사용하기 위해 핸들러를 재정의하는 방법과이를 얻지 못한다.
ContentHandler를 만들고 모든 메서드를 재정의하고 새 저장소를 외부 소스와 함께 사용하는 다른 StorageFilter를 만들어야합니까? 새 처리기를 처리기에 어떻게 주입합니까?
public class CountryPartHandler : ContentHandler
{
public CountryPartHandler(IRepository<CountryPartRecord> repository)
{
Filters.Add(StorageFilter.For(repository));
}
protected override void Loading(LoadContentContext context)
{
base.Loading(context);
}
}
업데이트 :
public ProductPartHandler(IRepository<ProductPartRecord> repository, Work<IProductService> productServiceWork)
{
Filters.Add(StorageFilter.For(repository));
OnActivated<ProductPart>((context, part) => {
part.ProductField.Loader(() => productServiceWork.Value.GetProduct(part.Id));
});
}
하지만이 할 수있는 내 코드에서이 Using External Data with Orchard (25 분 정도) 비디오에서
, 그는이 코드로 필요한 일을 할 것 같다 비디오에서 모든 참조가 있지만 "ProductField"가 사용자 정의 유형인데도 "로더"기능을 찾지 못합니까? 여부 나머지, WCF 등,하지만 논리를 통해 수, 당신은 당신의 외부 데이터를로드하는 방법
public class MyPart : ContentPart {
internal readonly LazyField<CustomData> CustomDataField = new LazyField<CustomData>();
public CustomData CustomData {
get { return CustomDataField.Value; }
}
}
public class CustomData {
...
}
public class MyPartHandler : ContentPartHandler {
private ICustomService _customService;
public MyPartHandler(ICustomService customService){
_customService = customService;
OnActivated<MyPart>(Initialize);
}
private void Initialize(ActivatedContentContext context, MyPart part){
part.CustomDataField.Loader(() => {
return _customService.Get(part.ContentItem.Id);
});
}
}
가 나도 몰라 :
정말 고마워. orchard가 나머지 로직을 처리하기에 충분한 OnActivated 함수입니까? 아니면 모든 이벤트에 대해 동일한 작업을 수행해야합니까? (OnCreated, OnCreating ... 등) – Velair
그냥 onactivated. 이것은 객체 계층 구조가 생성되었을 때 호출됩니다. 가장 낮은 수준의 이벤트입니다. Oncreated는 컨텐트 아이템이 생성되었을 때를 의미합니다. :) – Hazza