2015-04-05 50 views
0

在我的一個Web應用程序中,我有一個使用Autofac的Web服務,svc文件如下:Autofac錯誤 - 從請求實例的作用域看不到標籤匹配'AutofacWebRequest'的作用域

<%@ ServiceHost Language="C#" Debug="true" 
Service="MyApp.WebServices.Contracts.Interfaces.IMyWebService, MyApp.WebServices.Contracts" 
Factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf" %> 

我登記我的Web服務應用程序的依賴關係是這樣的:

public class IocConfig 
{   
    public static void RegisterDependencies() 
    { 
     var builder = new ContainerBuilder();    

     //web services 
     builder.RegisterType<MyWebService>().As<IMyWebService>().InstancePerLifetimeScope(); 

     var container = builder.Build(); 

     AutofacHostFactory.Container = container;    
    } 
} 

從另一個Web應用程序,我想連接到也使用Autofac這些服務,所以我註冊的依賴關係,如:

public class IocConfig 
{ 
    //Ioc dependencies for frontend application 
    public static void RegisterDependencies() 
    { 
     var builder = new ContainerBuilder(); 

     builder.RegisterControllers(typeof(MvcApplication).Assembly); 

     builder.RegisterModule<AutofacWebTypesModule>(); 

     builder 
      .Register(c => new ChannelFactory<ISomeWebService>(
       new BasicHttpBinding(), 
       new EndpointAddress("http://localhost/MyApp.WebServices/MyWebService.svc"))) 
      .InstancePerLifetimeScope(); 

     //register service proxies 
     builder.Register(c => c.Resolve<ChannelFactory<IMyWebService>>().CreateChannel()) 
      .As<IMyWebService>() 
      .UseWcfSafeRelease(); 

     var container = builder.Build(); 
     DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 
    } 
} 

裏面的控制器中的一個,我執行以下操作:

public SomeController(IMyWebService myServiceProxy) 
    { 
     _myServiceProxy = myServiceProxy; 

     var response =_myServiceProxy.CallSomeMethod(new Request() 
     { 
      EmailAddress = "[email protected]" 
     }); 
    } 

型IMyWebService的myServiceProxy被解決,我看,這是一個透明代理,但是當我稱之爲「CallSomeMethod」我收到一個錯誤:

沒有標籤符合'AutofacWebRequest'的作用域在請求實例的作用域中可見。這通常表示按照Single-HTTP請求註冊的組件正在通過SingleInstance()組件(或類似的場景)請求。在Web集成下,始終請求DependencyResolver.Current或ILifetimeScopeProvider.RequestLifetime的依賴關係,而不是從容器本身。

我在這裏做錯了什麼?謝謝!

回答

4
+0

改變了我的一生依賴從InstancePerRequest到InstancePerLifetimeScope和現在的作品。謝謝! – lex87 2015-04-06 10:39:13

+0

此外,我的NHibernate會話工廠仍然是一個SingleInstance生命週期,它的工作原理,問題確實與InstancePerRequest。 – lex87 2015-04-06 10:42:10