1

CastleWindsorIoCを利用しようとしています。私は非常に単純なアプリケーションを持っています。私のインターフェースはTest.Services名前空間に存在します。コンパイル時に次の例外が発生します。

タイプ名Test.Services.IParse、Test.Servicesが見つかりませんでした。」

これは私のapp.configです:

<configuration>
  <configSections>
    <section name="castle"
      type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler,    
      Castle.Windsor" />


   </configSections>

  <castle>
    <components>
      <component id="HtmlTitleRetriever"
                 type="Test.HTMLTitleRetriever, Test">
      </component>
      <component id="FileParser"
                 service="Test.Services.IParse, Test.Services"
                 type="Test.FileParser,   
                      Test">
      </component>
      <component id="FileDownloader"
                 service="Test.Services.IDownload, Test.Services"
                 type="Test.FileDownloader, Test">
      </component>
    </components>
  </castle>

誰かが私が欠けているものを教えてもらえますか?

ありがとう

-ニック

4

5 に答える 5

2

ばかげた質問ですが、登録したクラスを含むアセンブリが実際に出力ディレクトリにコピーされると確信していますか?

于 2009-03-09T14:11:10.057 に答える
0

私は同じ問題を抱えていて、エリックの解決策は問題を解決するために働きました。「ドメインモデル」プロジェクトを作成し、後で「DomainModel」に名前を変更しましたが、すべての参照を変更しましたが、binフォルダーを見ると、アセンブリは「ドメインモデル」と呼ばれていました。そのため、Castlewindsorはそれを見つけることができませんでした。

于 2009-07-29T14:29:12.677 に答える
0
IWindsorContainer container = new WindsorContainer();

        container.AddComponent("FileDownlader", typeof(IDownload),
             typeof(FileDownloader));
        container.AddComponent("FileParser", typeof(IParse),
             typeof(FileParser));
        container.AddComponent("HTMLTitleRetriever", typeof(HTMLTitleRetriever));

        HTMLTitleRetriever retriever = container.Resolve<HTMLTitleRetriever>();

コードで次のことを行うと機能します。設定ファイルを使用したいので、変更を毎回再コンパイルする必要はありません。

于 2009-03-08T21:49:02.553 に答える
0

ほとんどニック!xml構成をWindsorContainerのコンストラクターに渡す必要があります。

IWindsorContainer container;
container =
  new WindsorContainer(
    new XmlInterpreter(
      new ConfigResource("castle")
  ));

キャッスルウィンザーで遊び始めたときも、この「ゴッチャ」に出くわしました。構成セクションを調べることはわかりません。

ヒント:トランクから最新のものを入手してください。同じインターフェイスで複数のクラスを一括登録するのに非常に便利なRegisterという新しいメソッドがあります。つまり、ASP.NET MVCを使用して開発していて、多数のIControllerがある場合は、CastleWindsorを使用してそれらを自動登録できます。したがって、構成ファイルでそれらを指定する必要はありません!

public class WindsorControllerFactory : IControllerFactor
{
  IWindsorContainer container;
  public WindsorControllerFactory()
  {
    container =
      new WindsorContainer(
        new XmlInterpreter(
          new ConfigResource("castleWindsor")
      ));

    container.Register(
      AllTypes.Of<IController>()
      .FromAssembly(Assembly.GetExecutingAssembly())
      .Configure(component => component.LifeStyle.Transient
        .Named(component.Implementation.Name)
      ));
  }
}
于 2009-03-08T21:58:41.937 に答える
0

IParse インターフェイスは Test.Services アセンブリ (Test.Services.dll) にありますか?

構成で型名を定義するために使用される形式は、型のAssemblyQualifiedNameプロパティから取得できるものと同じです。一言で言えば、それは次のとおりです。

Namespace.Type、アセンブリ。

ジェネリック型については、こちらを参照してください。

于 2009-03-10T00:04:19.677 に答える