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

ли вы BreakPoint установщик, чтобы убедиться, что он на самом деле работает? Вы также можете проверить контейнер во время отладки, чтобы проверить, какие службы зарегистрированы и какие реализации поддерживают их. – Charleh

+0

@Charleh Я установил точку останова для установщика, и я вижу, что он не запускается. Как я могу заставить его работать? Благодарю. – jason

+1

Возможно, вам нужно сделать свой установщик 'public'. Я бы предположил, что Windsor просматривает сборку для публичных типов, реализующих интерфейс 'IWindsorInstaller'. Вероятно, Виндзор не работает, потому что он не может его найти. – Charleh

ответ

1

Установщики в Виндзоре должны быть общедоступными, так как Виндзор ищет общедоступные типы, реализующие интерфейс IWindsorInstaller.

Создание установки public должен решить проблему