1

Orchardに固有ではない機能をカプセル化するコードがあります。ただし、依存性注入を介してOrchardで利用できるようにする必要があります。そこで、すべてのコンポーネント(タイプ)を登録するAutofacモジュールを作成しましたが、OrchardのAutofacコンテナに通知する方法が見つかりません。

私が赤字で示したものから、モジュールをコンテナに追加する方法は2つあります。

でモジュールをContainerBuilderに提供するか(通常は起動時)、または実行時にContainerBuilderを使用してすでに構築されているContainerを更新します。

私は最初の方法で問題に取り組むことができますが、そのようなものがある場合は、むしろ2番目の方法を実行しますか?

4

2 に答える 2

2

Autofac.ModuleOrchardモジュールから派生するクラスを追加するだけで、それだけです。コンテナの構築中にオーチャードによって自動的に選択されます。

于 2012-12-07T22:08:27.740 に答える
1

Piotr Szmydの答えは基本的に正しいですが、ここでもう少し詳しく説明します。

Orchard Moduleは、Orchard.slnに追加した新しい.csprojです。そのcsprojへの参照としてAutofacを追加します(NugetではなくOrchardに含まれているバージョンを使用していることを確認してください。この問題の詳細については、こちらを参照してください)。 Autofac.Moduleから派生し、Load(ContainerBuilder)を実装するクラスを追加します。例えば

using System;
using Autofac;

namespace MyCustom.Module.Namespace
{
  public class LoaderModule : Autofac.Module
  {
    protected override void Load(ContainerBuilder builder)
    {
      builder.RegisterType<MyClass>().As<IMyInterface>();
    }
  }
}

追記:Autofac登録コードは、アプリケーションの起動時にのみ呼び出されます。サイトをIISにローカルに配置し、コードをVSに配置して実行している場合、Orcahrdの動的コンパイルの性質は、コードを再コンパイルしてもアプリケーションが停止しないことを意味します。

したがって、このAutofac登録コードがヒットする(およびそれに対する変更が有効になる)には、アプリケーションを強制終了するためにiisresetを実行する必要があります。これにより、Autofac登録が再ロードされます。

于 2015-02-25T11:15:43.653 に答える