1

autofacバージョン2.3.2.632のAutofac.Integration.Web.Mvcdllには、次のように定義されたクラスAutofacControllerFactoryがありました。

 public class AutofacControllerFactory : DefaultControllerFactory
    {
        public AutofacControllerFactory(IContainerProvider containerProvider);

        protected override IController GetControllerInstance(RequestContext context, Type controllerType);
        public override void ReleaseController(IController controller);
    }

最新バージョンのautofac(2.6.3.862)にはAutofac.Integration.Web.Mvcがありませんが、代わりにAutofac.Integration.Mvcがあります。ただし、このdllにはAutofacControllerFactoryクラスがありません。dll Autofac.Integration.Mvcには、AutofacDependencyResolverと呼ばれるクラスがあります。

public class AutofacDependencyResolver : IDependencyResolver
{
    public AutofacDependencyResolver(ILifetimeScope container);
    public AutofacDependencyResolver(ILifetimeScope container, Action<ContainerBuilder> configurationAction);
    public AutofacDependencyResolver(ILifetimeScope container, ILifetimeScopeProvider lifetimeScopeProvider);
    public AutofacDependencyResolver(ILifetimeScope container, ILifetimeScopeProvider lifetimeScopeProvider, Action<ContainerBuilder> configurationAction);

    public ILifetimeScope ApplicationContainer { get; }
    public static AutofacDependencyResolver Current { get; }
    public ILifetimeScope RequestLifetimeScope { get; }

    public object GetService(Type serviceType);
    public IEnumerable<object> GetServices(Type serviceType);
}

Autofacの最新バージョンでのAutofacControllerFactoryの代替品は何ですか?

4

2 に答える 2

2

の代わりはありませんAutofacControllerFactory。代わりに、を使用してDependencyResolverください。

Autofac wikiには、ASP.NETMVCの新しいバージョンと統合するための新しい方法に関するドキュメントがあります。そのwikiページには、実際に機能するコードを確認できるサンプルアプリケーションへのリンクが含まれています。

于 2012-11-02T17:28:59.187 に答える
1

これは、バージョンによるMVCのAPIの変更によるものだと思います。MVC 3/4では、あなたがあなたに入れる必要があるのは次のことだけだと信じてくださいApplication_Start

DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
于 2012-11-01T20:27:21.177 に答える