1

アプリケーションでAccountControllerを解決しようとしていますが、ライフタイムスコープの問題があるようです。

builder.Register(c => new MyDataContext(connectionString)).As<IDatabase>().HttpRequestScoped();
builder.Register(c => new UnitOfWork(c.Resolve<IDatabase>())).As<IUnitOfWork>().HttpRequestScoped();
builder.Register(c => new AccountService(c.Resolve<IDatabase>())).As<IAccountService>().InstancePerLifetimeScope();
builder.Register(c => new AccountController(c.Resolve<IAccountService>())).InstancePerDependency();

MyDataContextとUnitOfWorkをHttpRequestLevelでスコープする必要があります。AccountControllerを解決しようとすると、次のエラーが発生します。

式'value(Autofac.Builder.RegistrationBuilder`3 + <> c__DisplayClass0 [...])。lifetimeScopeTag.Equals(scope.Tag)'に一致するスコープは、インスタンスが要求されたスコープからは表示されません。

依存関係の有効期間が正しく設定されていませんか?

4

2 に答える 2

1

セットアップは正常に見えます-問題は、IContainerProvider.ApplicationContainerからAccountControllerを(手動で?)解決しようとしていることだと思います。

IContainerProvider.RequestLifetime(1.xのRequestContainer)からWebアプリの依存関係を解決する必要があります。

Autofac ASP.NET MVC統合を試しましたか?それはあなたのためにこれの世話をするでしょう。

于 2010-04-20T20:27:01.730 に答える
0

同じエラーが発生しました。登録手順をglobal.asax.csのApplication_BeginRequestセクションに移動して解決しました

builder.Register(c => new MyDataContext(connectionString)).As<IDatabase>().SingleInstance();
builder.Register(c => new UnitOfWork(c.Resolve<IDatabase>())).As<IUnitOfWork>().SingleInstance();
builder.Register(c => new AccountService(c.Resolve<IDatabase>())).As<IAccountService>();
builder.Register(c => new AccountController(c.Resolve<IAccountService>())));

それから私はコンテナの処分をします:

protected void Application_EndRequest()
{
    ContainerProvider.EndRequestLifetime();
}
于 2010-10-26T15:50:29.210 に答える