Замок Виндзор WcfFacility ошибка. забыл зарегистрировать компонент?

Я пытаюсь заставить Касл Виндзор создать мой WCF с помощью WcfFacility. Я следовал этому уроку. http://www.codeproject.com/Articles/426770/Dependency-Injection-in-WCF-using-Castle-Windsor но, похоже, у меня не работает. Я получаю следующую ошибку.

Не удалось найти компонент с именем ActionService.ServiceImplementations.ActionWebService, вы забыли его зарегистрировать?

Структура моего приложения следующая.

Один проект для веб-сервиса (только SVC-файлы без кода, web.config и global.asax)

Второй проект по контрактам и реализации. Здесь находятся IActionWebService и ActionWebservice.

У меня есть ссылка последнего в первый.

Это мой глобальный асакс.

public class Global : System.Web.HttpApplication
{
    IWindsorContainer container;
    protected void Application_Start(object sender, EventArgs e)
    {
        container = new WindsorContainer();

        container.AddFacility<WcfFacility>()
            .Register(
            Component.For<IAuthService>().ImplementedBy<AuthService>(),
            Component.For<IUserRepository>().ImplementedBy<UserRepository>(),
            Component.For<IActionWebService>().ImplementedBy<ActionWebService>().Named("ActionWebService")
            );
    }

И это мой файл SVC.

    <%@ ServiceHost 
Language="C#" 
Debug="true" 
Service="ActionService.ServiceImplementations.ActionWebService"
Factory="Castle.Facilities.WcfIntegration.DefaultServiceHostFactory, Castle.Facilities.WcfIntegration" %>

Я уже перешел к другим вопросам здесь и другим блогам, но их решения не помогли мне:(.

Кто-нибудь, кто может указать, где ошибка могла произойти?

РЕДАКТИРОВАТЬ Я прикрепил захват окна просмотра. Там вы можете увидеть, что все объекты загружены. Но это не решает их.

Здесь вы можете видеть, что фактические объекты загружаются в контейнер. Это просто не решает их

2 ответа

Я столкнулся с той же проблемой, это потому, что имя dll нашего проекта было изменено, в то время как код разметки файла SVC все еще ссылается на старое имя dll:

<%@ ServiceHost Language="C#" Debug="true" Service="[Namespace.ClassName],[DllName]" Factory="Castle.Facilities.WcfIntegration.DefaultServiceHostFactory, Castle.Facilities.WcfIntegration" %>

У меня была такая же ошибка

чтобы решить это в строковом параметре для регистрации, я поместил его с полным пространством имен примерно так.

protected void Application_Start(object sender, EventArgs e)
    {
        IWindsorContainer container = new WindsorContainer();

        container.AddFacility<WcfFacility>().Register(
          Component.For<IActivityLogsRepository>().ImplementedBy<ActivityLogsRepository>(),
            Component.For<IActivityLogsService>().ImplementedBy<ActivityLogsService>()
                .Named("Company.ServiceImplementation.ActivityLogsService"),

Я надеюсь это тебе поможет

Другие вопросы по тегам