2016-10-03 1 views
0

ここでは私のInstaller.csです:ここではComponentNotFoundException城ウィンザー

class Installer : IWindsorInstaller 
{ 
    public void Install(IWindsorContainer container, IConfigurationStore store) 
    { 
     container 
      .Register(Component.For<IDbContext>() 
      .ImplementedBy<ApplicationDbContext>() 
      .LifeStyle.PerThread 
      ); 

     container 
      .Register(Component.For(typeof(IRepository<>)) 
      .ImplementedBy(typeof(Repository<>)) 
      .LifeStyle.PerThread 
      ); 

     container 
      .Register(Component.For<IServiceReadCity>() 
      .ImplementedBy<ServiceReadCity>() 
      .LifeStyle.PerThread 
      ); 
    } 
} 

は私のProgram.csです:

SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); 
System.Data.Entity.SqlServer.SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=12.0.0.0, Culture=neutral, PublicKeyToken=898989899898989898"; 

var container = new WindsorContainer(); 

container.Install(FromAssembly.This()); 
IServiceReadCity _cityReadService = container.Resolve<IServiceReadCity>(); 

var cities = _cityReadService.GetListQuery(); 

これは、コンソールアプリケーションです。私はこの例外を取得:この行で

{ "Reveal.Domain.Location.Service.Read.IServiceReadCityが見つかったサービス を支援するためのノーコンポーネント"} :

IServiceReadCity _cityReadService = container.Resolve<IServiceReadCity>(); 

ことができますあなたは私が間違ってやっていることを教えて、これを修正する方法は?ありがとう。

+1

問題を修正する必要が作る

あなたはそれが実際に実行されることを確認するために、インストーラをブレークポイントましたか?また、デバッグ中にコンテナを検査して、どのサービスが登録されているか、どのサービスがそのサービスをサポートしているかを確認することもできます。 – Charleh

+0

@Charlehインストーラにブレークポイントを設定しても、実行されないことがわかります。どうすればそれを動作させることができますか?ありがとう。 – jason

+1

インストーラを 'public'する必要があるかもしれません。私はウィンザーが 'IWindsorInstaller'インターフェースを実装しているパブリック型のアセンブリをスキャンすると思います。ウィンザーがそれを見つけることができないため、ウィンザーを実行していない可能性があります。 – Charleh

答えて

1

Windsorのインストーラは、IWindsorInstallerインターフェイスを実装しているパブリックタイプをWindsorが探しているため、一般公開されている必要があります。インストーラpublic

関連する問題