例:私は別のDBに保存されている国のカタログを持っていますので、一部のContentPartでプロパティとして使用する必要があります。私はオーチャードの配線にあまり干渉することなく接続しようとしています。外部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);
}
}
アップデート:このUsing External Data with Orchard(25分程度)ビデオで
、彼はこのコードで私が必要なものをやっているように見える:
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));
});
}
しかし、それができる私のコードで私はビデオからのすべての参照を持っているにもかかわらず、 "ローダー"関数を見つけることができないので、おそらくProductFieldはカスタムタイプですか?
本当にありがとうございます。 Orchardが残りのロジックを処理するためにOnActivated関数が十分であるか、すべてのイベントに対して同じ処理を行う必要がありますか? (OnCreated、OnCreating ...など) – Velair
ただオンになっています。これは、オブジェクト階層が作成されたときに呼び出されます。これは私が信じる最低レベルのイベントです。 Oncreatedは、コンテンツアイテムが作成されたときのものです。 – Hazza