3

ASP.NET MVC プロジェクトで作業しているとしましょう。これは、単一のソリューション内のさまざまなプロジェクトに分割されたレイヤーです。各プロジェクトには、依存関係を結び付けるために作成された autofac モジュールがあります。ここで、アセンブリをスキャンして、すべてのモジュールをコンテナーに登録します。

ここで共有されているものと同様の拡張メソッドを採用しましたhttp://goo.gl/VJEct

public static void RegisterAssemblyModules(this ContainerBuilder builder, Assembly 
assembly)
{
  var scanningBuilder = new ContainerBuilder();

  scanningBuilder.RegisterAssemblyTypes(assembly)
    .Where(t => typeof(IModule).IsAssignableFrom(t))
    .As<IModule>();

  using (var scanningContainer = scanningBuilder.Build())
  {
    foreach (var m in scanningContainer.Resolve<IEnumerable<IModule>>())
      builder.RegisterModule(module);
  }
}

私の最初の質問は、このサンプルが数年前に提供されたことを考えると、これは現在のバージョンの autofac で使用するのにまだ実行可能な構造ですか?

次に、MVC アプリは他のレイヤーの機能に依存しているため、.InstancePerHttpRequest() で型を登録する必要がある場合があります。ただし、Web アプリケーション以外からそれらを参照し、System.Web に依存しないようにするオプションも必要です。これらの異なるコンテキストで使用できるモジュールを登録するための最良の方法は何ですか?

4

1 に答える 1

0

モジュールをコンテナーに登録しません。そうする理由はありません。

ここにの方法があります。

Activator.CreateInstanceモジュールを作成し、ビルダーに登録するために使用します。

同じフレームワークにより、構成不要の登録サポートも提供されます。サービスに属性を追加するだけです:

[Component]
public class MyService : IService
{
}

ビルダー拡張メソッドを実行します。

builder.RegisterAllComponents(Assembly.GetExecutingAssembly());
于 2012-04-05T05:39:47.587 に答える