Я пытаюсь начать работу с Castle.Windsor и после комментария, который я сделал по образцам, доступным в настоящее время для новичков (http://stw.castleproject.org/Windsor.Silvertlight_Sample_App_Customer_contact_manager.ashx?Discuss=1), Я подумал, что возьму быка за рога и обновлю приведенный здесь пример http://dotnetslackers.com/articles/designpatterns/InversionOfControlAndDependencyInjectionWithCastleWindsorContainerPart1.aspx.
Это простое и довольно простое консольное приложение, использующее Castle Windsor, хотя и устаревшую версию. Мой метод Main в Program.cs выглядит следующим образом:
public static void Main()
{
IWindsorContainer container = new WindsorContainer();
container.Install(FromAssembly.This());
var retriever = container.Resolve<IHtmlTitleRetriever>();
Console.WriteLine(retriever.GetTitle(new Uri(ConfigurationManager.AppSettings["fileUri"])));
Console.Read();
container.Dispose();
}
иСервис и Компоненты, которые находятся в одном файле, то есть Program.cs, таким образом:
public interface IHtmlTitleRetriever
{
string GetTitle(Uri file);
}
public interface IFileDownloader
{
string Download(Uri file);
}
public interface ITitleScraper
{
string Scrape(string fileContents);
}
public class HtmlTitleRetriever: IHtmlTitleRetriever
{
private readonly IFileDownloader _downloader;
private readonly ITitleScraper _scraper;
public HtmlTitleRetriever(IFileDownloader dowloader, ITitleScraper scraper)
{
_downloader = dowloader;
_scraper = scraper;
}
public string GetTitle(Uri file)
{
string fileContents = _downloader.Download(file);
return _scraper.Scrape(fileContents);
}
}
public class HttpFileDownloader : IFileDownloader
{
public string Download(Uri file)
{
return new WebClient().DownloadString(file);
}
}
public class StringParsingTitleScraper : ITitleScraper
{
public string Scrape(string fileContents)
{
string title = string.Empty;
int openingTagIndex = fileContents.IndexOf("<title>");
int closingTagIndex = fileContents.IndexOf("</title>");
if(openingTagIndex != -1 && closingTagIndex != -1)
title = fileContents.Substring(openingTagIndex, closingTagIndex - openingTagIndex).Substring(7);
return title;
}
}
Это в значительной степени прямая копия того, что Симоне Бусоли имеет из своего примера. Код компилируется нормально, но яполучить следующую ошибку при запуске приложения:
Не найдено ни одного компонента для поддержки службы WindsorSample.IHtmlTitleRetriever
Я понимаю, что это значит, но я не знаючто я делаю неправильно, что компоненты не загружаются в контейнер. Я использую Castle.Windsor 2.5.2 и .NET 4.0.
С нетерпением жду ответов,
Дэвид