在我的一个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的依赖关系,而不是从容器本身。
我在这里做错了什么?谢谢!
改变了我的一生依赖从InstancePerRequest到InstancePerLifetimeScope和现在的作品。谢谢! – lex87 2015-04-06 10:39:13
此外,我的NHibernate会话工厂仍然是一个SingleInstance生命周期,它的工作原理,问题确实与InstancePerRequest。 – lex87 2015-04-06 10:42:10