필자는 필사적으로이 작업을 수행하려고합니다. WCF 서비스를 사용하여 JQuery로 AJAX를 수행했습니다.AJAX 지원 WCF 서비스에서 Autofac 사용
이제는 DI 용 Autofac을 사용하고 있으며, 지금까지는 AJAX의 기본 UI가 될 WCF 서비스를 내 UI 프로젝트에서 사용하기 전까지는 조용하게 진행되고 있습니다. 내 일반적인 웹 응용 프로그램에서는 Global.asax 'Application_Start'를 사용하여 컨테이너를 등록합니다. 이 작업은 MyBootstrapper 프로젝트에서 Boot() 메서드를 호출하여 수행합니다. Boot() 메소드는 단순히 모든 모듈을 등록합니다.
이제 WCF 서비스가 있고 'AJAX 사용 WCF 서비스'템플릿을 사용하면 서비스가 호출 된 후에 Global.asax가 호출되지 않는다는 것을 알았습니다.
이를 위해 Bootstrapper에서 내 Boot() 메소드를 호출하는 void host_Opening 메소드로 간단한 MyServiceHostFactory를 만들었습니다. 이것은 잘 될 것 같습니다. 아무것도 설정되지는 않았지만.
public class MyAsyncServiceHostFactory : ServiceHostFactory, IContainerProviderAccessor
{
static IContainerProvider _containerProvider;
public IContainerProvider ContainerProvider
{
get { return _containerProvider; }
}
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
var host = base.CreateServiceHost(serviceType, baseAddresses);
host.Opening += host_Opening;
return host;
}
void host_Opening(object sender, EventArgs e)
{
// Setup Autofac stuff.
var container = MyBootLoader.Boot();
_containerProvider = new ContainerProvider(container);
}
}
그리고 MyBootLoader :
public static class MyBootLoader
{
public static IContainer Boot()
{
var builder = ConfigureContainer();
return builder.Build();
}
private static ContainerBuilder ConfigureContainer()
{
var builder = new ContainerBuilder();
builder.RegisterType<PersonManager>().As<IPersonProvider>().InstancePerHttpRequest();
return builder;
}
}
MyAsyncService
<%@ ServiceHost Language="C#" Debug="true" Service="MyWebApp.UI.Ajax.MyAsyncService" CodeBehind="MyAsyncService.svc.cs" Factory="MyWebApp.UI.Ajax.MyAsyncServiceHostFactory"%>
MyAsyncServiceHostFactory의
[ServiceContract(Namespace = "MyWebApp.UI.Ajax")]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyAsyncService
{
public IPersonProvider PersonManager { get; set; }
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public List<Person> GetPersons()
{
var persons = PersonManager.GetPersons();
return persons;
}
}
마크 업 : 여기에
내 WCF 코드내 Web.config의 :
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="MyWebApp.UI.Ajax.MyAsyncServiceAspNetAjaxBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
<service name="MyWebApp.UI.Ajax.MyAsyncService">
<endpoint address="" behaviorConfiguration="MyWebApp.UI.Ajax.MyAsyncServiceAspNetAjaxBehavior"
binding="webHttpBinding" contract="MyWebApp.UI.Ajax.MyAsyncService" />
</service>
</services>
</system.serviceModel>
내가 실종 무엇, 제발? 모든 것이 끝나는 것처럼 보이지만 MyAsyncService에서 PersonManager가 NULL입니다.
나는 심지어 내 MyAsyncServiceHostFactory에서 'host_opening'내 구성 요소를 등록하는 대신 내 부팅() 메서드를 호출하려고 : 내 부트 로더에서
나는 다음과 같은 추가. 따라서 두 곳을 등록하는 구성 요소가 있습니다. 그것도 작동하지 않았다. – codingjoe내 질문과 같이 보입니다. 결국 사소한 것이 아닙니다. 나는 AJAX-Enabled WCF Service 템플릿으로 Autofac DI를 시도 할 사람을 제안합니다. – codingjoe