1

asp.netmvcおよびwebapiプロジェクトでautofacを使用しています。

構成では、これを行っています:

var builder = new ContainerBuilder();
builder.Register(x => NHibernateConfigurator.BuildSessionFactory()).SingleInstance();
builder.Register(x => x.Resolve<ISessionFactory>().OpenSession()).InstancePerHttpRequest();
builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());

builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

var container = builder.Build();

DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

ここで問題となるのは、コンストラクターを介してISessionを挿入し、呼び出した場合、APIコントローラーで

DependencyResolver.Current.GetService<ISession>() 

2つの異なるインスタンスを返します。

問題はこれらの2行が原因だと思います:

DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

しかし、どうすれば同じインスタンスを返すようにできますか?

編集:

明確にするために、HttpRequestごとに同じISessionのインスタンスを期待しています。現在、同じリクエストで異なるインスタンスを取得しています。

ありがとう

4

1 に答える 1

1

わかりました、私は答えを見つけたと思います-それはできません..少なくともDependencyResolverではできません。

ASP .Net 4 Web Api RC + Autofac 手動解決

コメントに書かれていることを実行し、IComponentContext をコンストラクターに追加し、それを使用して必要なものを解決しました。

それは働いているようです。ありがとう。

于 2012-11-25T09:00:20.293 に答える