2016-10-03 133 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

您可能需要將安裝程序設置爲「公共」。我想像Windsor會掃描程序集中的公共類型實現'IWindsorInstaller'接口。可能溫莎不運行它,因爲它無法找到它。 – Charleh

回答

1

Windsor的安裝人員需要公開訪問,因爲Windsor正在尋找實現IWindsorInstaller界面的公共類型。

製作安裝public應該可以解決