2015-04-05 53 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