В одном из моих веб-приложений у меня есть веб-служба, использующая Autofac, файл svc выглядит следующим образом:Ошибка автофокусировки - с областью действия, в которой был запрошен экземпляр, не видно области с тегом соответствия «AutofacWebRequest»
<%@ 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 = "[email protected]"
});
}
myServiceProxy типа IMyWebService решается, я вижу, что это прозрачный прокси-сервер, но когда я называю «CallSomeMethod» Я получаю сообщение об ошибке:
Никакой области с тегом, соответствующим «AutofacWebRequest», видны из области, в которой запрашивался экземпляр. Это обычно указывает на то, что компонент, зарегистрированный в качестве HTTP-запроса, запрашивается компонентом SingleInstance() (или аналогичным сценарием). В рамках веб-интеграции всегда запрашиваются зависимости от DependencyResolver.Current или ILifetimeScopeProvider.RequestLifetime, никогда из самого контейнера ,
Что я здесь делаю неправильно? Благодаря!
изменил мою жизнь зависимостей от InstancePerRequest к InstancePerLifetimeScope и теперь он работает. Благодаря! – lex87
Кроме того, моя фабрика сеансов NHibernate по-прежнему является жизненным циклом SingleInstance, и она работает, проблема в том, что это действительно с InstancePerRequest. – lex87