2017-02-22 2 views
0

DDD, Unit of Work 및 autofac.wcf를 사용하여 WCF에서 프로젝트를 수행하고 있으며 다음 오류가 발생합니다.WCF 용으로 구성된 autofac wcf가 Autofac 컨테이너에 등록되지 않았습니다.

WCF 용으로 구성된 'WebCode.Service.WCF.TablasMaestrasService, WebCode.Service.WCF'서비스가 Autofac 컨테이너에 등록되어 있지 않습니다.

Bootstrapper.cs

builder.RegisterType<UnitOfWork>().As<IUnitOfWork>(); 
builder.RegisterType<DatabaseFactory>().As<IDatabaseFactory>(); 
builder.RegisterType<SystemRuntimeCacheStorage>().As<ICacheStorage>(); 
builder 
    .RegisterAssemblyTypes(typeof(PaisRepository).Assembly) 
    .Where(t => t.Name.EndsWith("Repository")) 
    .AsImplementedInterfaces(); 

builder 
    .RegisterAssemblyTypes(typeof(PaisService).Assembly) 
    .Where(t => t.Name.EndsWith("Service")) 
    .AsImplementedInterfaces(); 

IContainer container = builder.Build(); 

container.Resolve<IUnitOfWork>(); 
container.Resolve<IDatabaseFactory>(); 
container.Resolve<ICacheStorage>(); 

AutofacHostFactory.Container = container; 

TablasMaestrasService.svc

<%@ ServiceHost 
    Language="C#" 
    Debug="true" 
    Service="WebCode.Service.WCF.TablasMaestrasService,WebCode.Service.WCF" 
    Factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf" 
    CodeBehind="TablasMaestrasService.cs" %> 

TablasMaestrasService.cs

[ServiceContract] 
public class TablasMaestrasService : ITablasMaestrasService 
{ 
    private readonly IPaisService _paisService; 

    public TablasMaestrasService(IPaisService paisService) 
    { 
     _paisService = paisService; 
    } 

    public List<PaisDto> GetPaises() 
    { 
     return = _paisService.GetAll(); 
    } 
} 

ITablasMaestrasService.cs

[ServiceContract]  
public interface ITablasMaestrasService 
{ 
    [OperationContract] 
    List<PaisDto> GetPaises(); 
} 
,

그럴 수 있습니까? 도움

+0

그것은 저장소가 호출되지 않고 검증 나는 또한이'[의 ServiceContract]'속성에 할 필요가 생각 – ascariz

+0

을 수행 인터페이스가 아니라 구현에. –

답변

0

는 서비스 구현을 등록

builder.RegisterType<WebCode.Service.WCF.TablasMaestrasService>(); 

Autofac documentation

+0

당신은 항상 서비스 구현을 등록해야합니다. 이 경우에는'TablasMaestrasService'로 등록되어야합니다 -'.svc' 파일이'Service' 속성을 통해 참조하기 때문입니다. –

+0

줄을 추가하면이 오류가 발생합니다. TablasMaestrasService 유형의 서비스 클래스는 ServiceContract를 정의하고 ITablasMaestrasService 유형에서 ServiceContract를 상속합니다. 계약 상속은 인터페이스 유형간에 만 사용할 수 있습니다. 클래스가 ServiceContractAttribute 특성으로 표시되어 있으면 ServiceContractAttribute가있는 계층 구조의 유일한 형식이어야합니다. WebCode.Service.WCF.ITablasMaestrasService 유형의 ServiceContractAttribute를 WebCode.Service.WCF.ITablasMaestrasService 유형으로 구현 된 별도의 인터페이스로 이동하십시오. – ascariz

+0

오류 메시지가 올 바릅니다. [ServiceContract] 속성을 서비스에서 ITablasMaestrasService 인터페이스로 옮겨야합니다. 또한 해당 인터페이스의 메소드에 [OperationContract] 속성이 있는지 확인하십시오. – Daprpaz