#c# #castle-windsor
#c# #замок-Виндзор
Вопрос:
Вот мой Installer.cs :
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.Домен.Расположение.Сервис.Чтение.Найден IServiceReadCity»} В этой строке :
IServiceReadCity _cityReadService = container.Resolve<IServiceReadCity>();
Можете ли вы сказать мне, что я делаю не так и как это исправить? Спасибо.
Комментарии:
1. Вы установили точку останова своего установщика, чтобы убедиться, что он действительно работает? Вы также можете проверить контейнер во время отладки, чтобы проверить, какие службы зарегистрированы и какие реализации поддерживают их.
2. @Charleh Я устанавливаю точку останова для установщика и вижу, что он не запускается. Как я могу заставить это работать? Спасибо.
3. Вероятно, вам нужно создать свой установщик
public
. Я бы предположил, что Windsor сканирует сборку на наличие общедоступных типов, реализующихIWindsorInstaller
интерфейс. Вероятно, Windsor не запускает его, потому что не может его найти.4. Вы правы. Общедоступность установщика решила проблему. Спасибо.
Ответ №1:
Установщики в Windsor должны быть общедоступными, поскольку Windsor ищет общедоступные типы, реализующие IWindsorInstaller
интерфейс.
Создание установщика public
должно устранить проблему