Образец справки Windsor IoC - «HttpServiceWatcher &, который не был зарегистрирован».

Я следую примеру начала работы Windsor Inversion of Control (IoC) , который находится в C #, но я реализую его в VB.Net, и я столкнулся с небольшой проблемой ...

Вот исключение, которое я получаю в полном объеме:

Невозможно создать компонент form.component, так как он имеет зависимости, которые должны быть удовлетворены. form.component ожидает следующих зависимостей:

Услуги: - InversionOfControl.HttpServiceWatcher & который не был зарегистрирован.

но я думаю, что регистрирую это - это первый зарегистрированный!

Я использую VB 8 (Visual Studio 2005 / .Net 2.0) и Windsor 1.0 RC3 .


Вот мой App.vb :

Импортирует Замок. Виндзор

Публичное приложение класса

    Публичный общий суб-основной ()

        Дим контейнер как новый WindsorContainer

        зарегистрировать компоненты
        container.AddComponent ("httpservicewatcher", _
           GetType (HttpServiceWatcher))
        container.AddComponent ("email.notifier", GetType (IFailureNotifier), _
           GetType (EmailFailureNotifier))
        container.AddComponent ("alarm.notifier", GetType (IFailureNotifier), _
           GetType (AlarmFailureNotifier))
        container.AddComponent ("form.component", GetType (Form1))

        запросить компонент из контейнера
        Dim aForm As Form = контейнер (GetType (Form1))

        'используй это!
        Application.Run (альфа-форма)

        отпустите
        container.Release (альфа-форма)

    End Sub

Конечный класс

Form1

Открытый класс Form1

    Частный oServiceWatcher As HttpServiceWatcher

    Sub New (ByRef ServiceWatcher As HttpServiceWatcher)

        «Этот вызов требуется конструктору форм Windows.
        InitializeComponent ()

        'Добавьте любую инициализацию после вызова InitializeComponent ().
        Me.oServiceWatcher = ServiceWatcher
    End Sub
Конечный класс

HttpServiceWatcher

Открытый класс HttpServiceWatcher

    Частный oNotifier как IFailureNotifier

    Sub New (ByRef Notifier As IFailureNotifier)
        oNotifier = Уведомитель
    End Sub

    Sub StartWatching ()

        'должен запустить поток, чтобы пропинговать сервис
        'if (pingresult = Failed)
        oNotifier.Notify ()
        конец если

    End Sub

    Sub StopWatching ()

        остановить поток

    End Sub

Конечный класс

IFailureNotifier

Открытый интерфейс IFailureNotifier

    Sub Notify ()

Конец интерфейса

AlarmFailureNotifier и EmailFailureNotifier оба реализуют IFailureNotifier, но Notify()методы пусты


Я попытался изменить порядок, поместив сначала IFailureNotifier, HttpServiceWatcher 3rd и Form last, но я получаю ту же ошибку.

Я сделал Очистить и восстановить, но я получаю ту же ошибку.

Я, очевидно, новичок в этом (как я прохожу «Начало работы»), не могли бы вы указать, что я пропустил, пожалуйста?

Спасибо: о)

10.02.2009 16:01:21
1 ОТВЕТ
РЕШЕНИЕ

Я не специалист по VB, но я подозреваю, что проблема заключается в ключевом слове ByRef в новой подпрограмме. Попробуйте изменить это на:

Public Class Form1

    Private oServiceWatcher As HttpServiceWatcher

    Sub New(ServiceWatcher As HttpServiceWatcher)

        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        Me.oServiceWatcher = ServiceWatcher
    End Sub
End Class
1
10.02.2009 17:20:03
Спасибо за подсказку - когда я удалил «ByRef», его заменили на «ByVal» (я думал, что это должен был быть один или другой, но я все равно попробовал это сделать!), И я изменил оба конструктора в Проект: Form1 и HttpServiceWatcher, и это отсортировало их. Еще раз спасибо: о)
Andrew 10.02.2009 21:17:04