2017-02-22 4 views
0

Я делаю проект в WCF с DDD, Unit of Work и autofac.wcf и дает мне следующую ошибку.autofac wcf, настроенный для WCF, не зарегистрирован в контейнере Autofac

Служба WebCode.Service.WCF.TablasMaestrasService, WebCode.Service.WCF, настроенная для 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' ссылается через атрибут« Сервис ». –

+0

Добавление строки дает мне эту ошибку. Класс обслуживания типа TablasMaestrasService определяет ServiceContract и наследует ServiceContract от типа ITablasMaestrasService. Наследование контракта может использоваться только между типами интерфейсов. Если класс помечен атрибутом ServiceContractAttribute, он должен быть единственным типом в иерархии с ServiceContractAttribute. Рассмотрим перемещение ServiceContractAttribute в виде WebCode.Service.WCF.ITablasMaestrasService на отдельный интерфейс, реализованный с помощью типа WebCode.Service.WCF.ITablasMaestrasService. – ascariz

+0

Сообщение об ошибке верное. Вам необходимо переместить атрибут [ServiceContract] из службы в интерфейс ITablasMaestrasService. Также проверьте, имеют ли методы этого интерфейса атрибут [OperationContract]. – Daprpaz

Смежные вопросы