1

NuGet を使用して、MVC3 プロジェクトに ASP.NET Web API RC を追加しました。

Install-Package AspNetWebApi

それから私はそれを構成しました。でGlobal.asax.cs

// configure regular controllers
var configuration = GlobalConfiguration.Configuration;
var container = Bootstrapper.ConfigureContainer(configuration);
containterProvider = new ContainerProvider(container);
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

// Set the dependency resolver implementation for Web API.
var resolver = new AutofacWebApiDependencyResolver(container);
configuration.DependencyResolver = resolver;

そしてBoostrapper.ConfigureContainer(...)私は追加しました:

// I register my types as InstancePerLifetimeScope() 
// but I also tried .InstancePerHttpRequest().InstancePerApiRequest()
// to the same end
builder.RegisterType<SomeService>()
    .AsImplementedInterfaces().InstancePerLifetimeScope();
// Register API controllers using assembly scanning.
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterWebApiFilterProvider(config);

これについては、こちらこちらで説明しています。

また、 NuGet を使用してAutofac, Autofac.Web,パッケージを更新し、パッケージをインストールしました。Autofac.Mvc3Autofac.WebApi

この構成で ApiController を実行しようとしたところ、次のエラーが発生しました。

「httpRequest」に一致するタグを持つスコープは、インスタンスが要求されたスコープから見えません。これは通常、HTTP ごとのリクエストとして登録されたコンポーネントが、SingleInstance() コンポーネント (または同様のシナリオ) によって要求されていることを示します。Web 統合の下では、コンテナー自体からではなく、常に DependencyResolver.Current または ILifetimeScopeProvider.RequestLifetime から依存関係を要求します。 .

次に、Alex Meyer-Gleaves からのこのコメントを読むと、次のようになります。

MVC3 で Web API パッケージを使用していると思われ、これが問題の原因です。MVC3 統合では、InstancePerHttpRequest ライフタイム スコープのタグは「httpRequest」でした。InstancePerHttpRequest と InstancePerApiRequest の両方を共通タグ「AutofacWebRequest」を使用するように変更したのは、MVC4 Beta および Web API Beta パッケージでした。Autofac.Mvc4 を使用して NuGet から MVC4 統合パッケージを取得できます。

コメント付きソース記事

アレックスからのアドバイスに従ってパッケージを入手しましたAutofac.Mvc4が、Mvc4 でしか動作せず、プロジェクトがビルドされませんでした。次に、Mvc3 に対してビルドする Autofac のソース コードを取得しましたAutofac.Mvc4

hg clone https://code.google.com/p/autofac/ --branch "MVC4 beta" C:\my\path

このアセンブリを参照として使用した後、機能しApiController始めましたが、通常Controllersは単一のコントローラーアクション呼び出しに対してのみ正常に機能しました。ビューが Html.RenderAction(...) を呼び出し、別のコントローラー アクションに更新または移動すると、次のエラーでクラッシュします。

「AutofacWebRequest」に一致するタグを持つスコープは、インスタンスが要求されたスコープからは見えません。これは通常、HTTP ごとのリクエストとして登録されたコンポーネントが、SingleInstance() コンポーネント (または同様のシナリオ) によって要求されていることを示します。Web 統合の下では、コンテナー自体からではなく、常に DependencyResolver.Current または ILifetimeScopeProvider.RequestLifetime から依存関係を要求します。 .

Autofac.Mvc4Mvc3 に対してバージョン 2.6.2.859の最新のソースからビルドすると役立つと思いましたが、そのソースが見つかりません。それとも、ここに何か他の問題がありますか?

4

1 に答える 1