2017-02-22 105 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