在我的一個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