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