Это очень похоже на регистрацию контейнера единичных объектов с помощью ASP.NET MVC. Хотя web api имеет другую линию выполнения. Следуй этим шагам.
NB: Я преобразовал этот код из C# в VB с помощью конвертера. Поэтому я надеюсь, что это синтаксически правильно. Хотя это точно в C#.
1) Реализовать IDependencyResolver (Убедитесь, что вы правильно разрешением имен здесь. IDependencyResolver должен исходить от System.Web.Http.Dependencies. Обратите внимание на ввезенных пространства имен.
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports Microsoft.Practices.Unity
Imports System.Web.Http.Dependencies
Namespace YourNamespace.Framework
Public Class UnityApiDependencyResolver
Implements IDependencyResolver
Private _container As IUnityContainer = Nothing
Public Sub New(container As IUnityContainer)
Me._container = container
End Sub
Public Function GetService(serviceType As Type) As Object
Try
Return _container.Resolve(serviceType)
Catch generatedExceptionName As Exception
Return Nothing
End Try
End Function
Public Function GetServices(serviceType As Type) As IEnumerable(Of Object)
Try
Return _container.ResolveAll(serviceType)
Catch generatedExceptionName As Exception
Return Nothing
End Try
End Function
Public Function BeginScope() As IDependencyScope
Return Me
End Function
Public Sub Dispose()
'
End Sub
End Class
End Namespace
'=======================================================
'Service provided by Telerik (www.telerik.com)
'Conversion powered by NRefactory.
'Twitter: @telerik
'Facebook: facebook.com/telerik
'=======================================================
2) Настройте свой контейнер либо через конфигурацию конфигурации, либо через код.
3) Зарегистрировать контейнер в Global.asax.vb файл
Dim container = New UnityContainer()
Dim section As UnityConfigurationSection = TryCast(ConfigurationManager.GetSection("unity"), UnityConfigurationSection)
section.Configure(container, "UnitySection")
'api dependency resolver
GlobalConfiguration.Configuration.DependencyResolver = New UnityApiDependencyResolver(container)
'=======================================================
'Service provided by Telerik (www.telerik.com)
'Conversion powered by NRefactory.
'Twitter: @telerik
'Facebook: facebook.com/telerik
'=======================================================
это так. Теперь вы можете объявить зависимость в любом из контроллера API, и он будет впрыскивается единства
Public Sub New(repositoryFactory As IRepositoryFactory, serviceFactory As IServiceFactory)
Me.repositoryFactory = repositoryFactory
Me.serviceFactory = serviceFactory
End Sub
'=======================================================
'Service provided by Telerik (www.telerik.com)
'Conversion powered by NRefactory.
'Twitter: @telerik
'Facebook: facebook.com/telerik
'=======================================================
Ваша регистрация типа неправильно, а также. вы должны указать либо интерфейс, либо абстрактный класс, как зависимость, и его конкретную реализацию как его отображение.
container.RegisterType например (Из IContext, Context)()
Я не понимаю, что пытаются достичь путем сопоставления целочисленное значение автомобиля. Вы хотите, чтобы объект автомобиля загружался на основе целочисленного значения в вашем параметре?
Ваш тип регистрации также неправильный. –
Использование интерфейса - это необходимо? – Gauls
интерфейс или абстрактный класс. Как иначе это будет считаться зависимостью? –