Используя Unity/Bootstrapper, я регистрирую свой базовый класс — ServiceBase для нескольких конкретных сервисов.
container.RegisterType<ServiceBase, ClearedPaymentService>("ClearedPaymentService");
container.RegisterType<ServiceBase, MissedPaymentService>("MissedPaymentService");
Я также регистрирую внешнюю службу ниже этого:
container.RegisterType<IPaymentService, PaymentServiceClient>("PaymentService");
Внешняя служба используется как в ClearedPaymentService, так и в MissedPaymentService, как показано ниже:
public partial class ClearedPaymentService : ServiceBase
{
private readonly IPaymentService _paymentService;
private readonly IScheduler _scheduler;
private Timer _timer;
public ClearedPaymentService(IPaymentService paymentService, IScheduler scheduler)
{
_paymentService = paymentService;
_scheduler = scheduler;
}
...etc
}
Когда я прихожу использовать свои 2 услуги, у меня возникают проблемы:
var container = (IUnityContainer)Bootstrapper.Container;
var services = container.ResolveAll<ServiceBase>();
if (Environment.UserInteractive)
{
RunInteractive(services.ToArray());
}
Код создает исключение для «services.ToArray()»:
Ошибка разрешения зависимости, type = "System.ServiceProcess.ServiceBase", name = "ClearedPaymentService". Исключение произошло во время: при разрешении. Исключение: InvalidOperationException — текущий тип Think.IncomeProtection.ThirdParty.Service.Contract.Outbound.IPaymentService является интерфейсом и не может быть создан. Вам не хватает сопоставления типов? Во время исключения контейнер был: Разрешение ThirdPartyPaymentInvoker.ClearedPaymentService,ClearedPaymentService (сопоставлено с System.ServiceProcess.ServiceBase, ClearedPaymentService) Разрешение параметра «paymentService» конструктора ThirdPartyPaymentInvoker.ClearedPaymentService(Think.IncomeProtection.ThirdParty.Service.Contract.Outbound .IPaymentService paymentService, планировщик ThirdPartyPaymentInvoker.IScheduler) Разрешение Think.IncomeProtection.ThirdParty.Service.Contract.Outbound.IPaymentService, (нет)
Я понимаю, о чем говорит ошибка - конструктор ClearedPaymentService ожидает конкретный экземпляр IPaymentService, но по какой-то причине он не был разрешен...
Я новичок в Unity, поэтому предположим, что это что-то основное, чего я еще не понял!
Любая помощь приветствуется.
Спасибо, Алекс