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

関連する問題