1

私は最近、まったく新しい EpiServer を使用して新しいプロジェクトに取り組み始めました。私のタスクの 1 つで、カスタム ページ プロバイダーを作成する必要があります。

サンプル ページ プロバイダーが動作し、読み込まれました。また、このライセンスでのみ機能を利用できるため、Enterprise Developer ライセンスを持っていることも確認しました。

そこで、ページ プロバイダーのスケルトン実装を行い、XmlPageProvider サンプルとまったく同じように、テスト サイトの web.config に情報を入力しました。

    <pageProvider>
      <providers>
        <add entryPoint="26" capabilities="Create,Edit,Delete,Move,MultiLanguage" 
          name="custom" type="MyWebsite.CustomProvider,CustomPageProvider" />
  <!--  <add filePath="~/externalPages.xml" entryPoint="26" capabilities="Create,Edit"
          name="xml" type="CodeSamples.XmlPageProvider,XmlPageProvider" />-->
      </providers>
    </pageProvider>

ところで、entryPoint プロパティは何を参照しているのでしょうか。これについての満足のいく説明はどこにも見つかりません。ただし、ページにアクセスすると、次のように表示されます。

エラーが発生しました 2/2/2009 10:07:26 AM ユーザー IP fe80::d0e0:16bf:c536:ad4d%10 ユーザー エージェント Mozilla/4.0 (互換性あり; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727 ; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618) Url http://ioc-dev-uk5:17003/cms/admin/default.aspx リファラー (なし)

例外の詳細: TypeInitializationException: 'EPiServer.DataFactory' の型初期化子が例外をスローしました。

スタックトレース:

[TypeInitializationException: 'EPiServer.DataFactory' の型初期化子が例外をスローしました。 System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() での InitializationModule.Application_BeginRequest(オブジェクト送信者、EventArgs e) System.Web.HttpApplication.ExecuteStep(IExecutionStep ステップ、Boolean& completedSynchronously) で

[内部例外 ArgumentException: タイプ MyWebsite.CustomProvider,CustomPageProvider のインスタンスを作成できません] EPiServer.Core.PageProviderMap.AddPageProvider(ProviderSettings pageProviderSetting) で EPiServer.Core.PageProviderMap.LoadPageProviders(ProviderSettingsCollection pageProvidersCollection) で EPiServer.Core.PageProviderMap..ctor (ProviderSettingsCollection pageProviders) の EPiServer.DataFactory..cctor()

ご覧のとおり、これはかなり役に立ちません。別のライセンスを取得し、IIS をリセットし、ボックスを再起動し、リフレクターを使用して EpiServer DataFactory のコードを見て何が起こっているのかを調べようとしましたが、すべて無駄でした。

私はそれが本当に簡単なことだと知っていますが、何ですか?約2日間、私を軽度の狂気に駆り立てています。

プレーゼ・ハルプ!

4

1 に答える 1

1

私はこれに自分で答えていると思います。

本当に簡単でした。

リフレクターを持って行き、これを見つけました:

private void AddPageProvider(ProviderSettings pageProviderSetting)
{
    if (Type.GetType(pageProviderSetting.Type) == null)
    {
        throw new ArgumentException("Cannot create an instance of type " + pageProviderSetting.Type);
    }
    PageProviderBase pageProvider = this.CreatePageProviderInstance(pageProviderSetting);
    pageProvider.Initialize(pageProviderSetting.Name, pageProviderSetting.Parameters);
    if (this._pageProviders.ContainsKey(UrlSegment.ReplaceIllegalChars(pageProvider.Name)))
    {
        throw new ArgumentException(string.Format("There is already a page provider with name {0} registered", pageProvider.Name));
    }
    this.AddPageProvider(pageProvider, false);
}

タイプ名には完全な名前空間が必要だったので、私の web.config は次のようになります。

<pageProvider>
  <providers>
    <add entryPoint="26" capabilities="Create,Edit,Delete,Move,MultiLanguage" 
      name="custom" type="MyWebsite.CustomProvider,MyWebsite.CustomProvider.CustomPageProvider" />
  </providers>
</pageProvider>

そして、私たちは皆起きて働いています...

不適切なエラー メッセージの別の例。「タイプが見つかりませんでした」と表示されていれば、多くの手間を省くことができたはずです。

于 2009-02-02T11:31:59.357 に答える