Ошибка Autofac - из области, в которой был запрошен экземпляр, не видна область с тегом, совпадающим с "AutofacWebRequest"
В одном из моих веб-приложений у меня есть веб-сервис, использующий Autofac, файл SVC выглядит следующим образом:
<%@ ServiceHost Language="C#" Debug="true"
Service="MyApp.WebServices.Contracts.Interfaces.IMyWebService, MyApp.WebServices.Contracts"
Factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf" %>
Я регистрирую зависимости для своего приложения веб-службы следующим образом:
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;
}
}
Из другого веб-приложения я хочу подключиться к этим службам, также используя 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 = "test@test.com"
});
}
MyServiceProxy типа IMyWebService разрешается, я вижу, что это прозрачный прокси, но когда я вызываю "CallSomeMethod", я получаю ошибку:
Из области, в которой был запрошен экземпляр, не видна область с тегом, совпадающим с "AutofacWebRequest". Как правило, это указывает на то, что компонент, зарегистрированный как запрос на HTTP, запрашивается компонентом SingleInstance() (или аналогичным сценарием). При веб-интеграции всегда запрашивают зависимости из DependencyResolver.Current или ILifetimeScopeProvider.RequestLifetime, а не из самого контейнера.,
Что я здесь не так делаю? Спасибо!
1 ответ
Согласно документам, WCF не поддерживает область действия каждого запроса. Если ваша реализация сервиса принимает зависимости, вы не можете зарегистрировать их согласно запросу.