2016-10-03 134 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应该可以解决