Я пытаюсь реализовать Dependency Injection, используя единство контейнера в vb.netDependency Injection vb.net, используя единство
когда я делаю вызов метода решительность я получаю ошибку resolutionFaieldException
Постановление зависимости Failed , type = "Test.EmailSending", name = "PDFEmailSender". Исключение произошло во время: при разрешении.
Module Module1
Private iemail As IErrorEmail
Sub Main()
'Dim email As New Test.EmailSending(iemail)
'email.Email()
Dim unity As UnityContainer = New UnityContainer
unity.RegisterType(Of IErrorEmail, SQLErrorEmail)("SQLErrorEmail")
unity.RegisterType(Of IErrorEmail, GenericEmail)("GenericEmail")
unity.RegisterType(Of IErrorEmail, Emailsending)("Emailsending")
Dim email1 = unity.Resolve(Of EmailSending)("SQLErrorEmail")
email1.Email()
End Sub
End Module
Интерфейс прост Ошибка электронной почты Интерфейс
Namespace InterfaceError
Public Interface IErrorEmail
Function ErrorEmail() As Boolean
End Interface
End Namespace
Я добавил два типа классов электронной почты, которые реализуют интерфейс IERROR
Imports InterfaceSender.InterfaceError
Public Class SQLErrorEmail
Implements IErrorEmail
Private _SenderEmail As IErrorEmail
Public Sub New(SQLErrorEmail As IErrorEmail)
_SenderEmail = SQLErrorEmail
End Sub
Public Function ErrorEmail() As Boolean Implements IErrorEmail.ErrorEmail
Dim isemailed As Boolean = False
Try
Email()
Catch ex As Exception
End Try
Return isemailed
End Function
Public Shared Sub Email()
Console.WriteLine("SQL Error Email")
Console.ReadLine()
End Sub
End Class
выше класс ошибок SQL реализует ErrorEmail и записывает на консоль, что это электронная почта с ошибкой SQL.
Imports InterfaceSender.InterfaceError
Public Class GenericEmail
Implements IerrorEmail
Private _SenderEmail As IErrorEmail
Public Sub New(GenericEmail As IErrorEmail)
_SenderEmail = GenericEmail
End Sub
Public Function SendEmail() As Boolean Implements IErrorEmail.ErrorEmail
Dim isemailed As Boolean = False
Try
Email()
Catch ex As Exception
End Try
Return isemailed
End Function
Public Shared Sub Email()
Console.WriteLine("Generic Error Email")
Console.ReadLine()
End Sub
End Class
выше класс реализует общую ошибку, которая наследует интерфейс IERROR и когда вызывается метод электронной почты он выдает выходной Genric электронной почты на консоль.
Imports Method.GenericEmail
Imports Method.SQLErrorEmail
Imports InterfaceSender.InterfaceError
Public Class EmailSending
Private _Isender As IErrorEmail
Public Sub New(ByVal Email As IErrorEmail)
MyBase.New()
_Isender = Email
End Sub
Public Sub EmailSendingLogic()
Dim type As String = "SQL"
If type = "SQL" Then
Method.SQLErrorEmail.Email()
ElseIf type = "Generic" Then
Method.GenericEmail.Email()
End If
End Sub
End Class
Вы сами зарегистрировали «EmailSending»? Потому что он не зарегистрирован в коде выше –
Нет, я не попробовал – user1339913
Каков граф объектов, который вы пытаетесь создать? Какую реализацию 'IErrorEmail' вы хотите ввести в' EmailSending'? Можете ли вы объяснить больше о том, что вы пытаетесь сделать? –