2017-02-22 75 views
0

我正在WCF中使用DDD,工作单元和autofac.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

它不是在库称为和验证进行 – ascariz

+0

我也觉得'[的ServiceContract]'属性需要上界面,而不是执行。 –

回答

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