Замок Виндзор 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"),
Я надеюсь это тебе поможет