Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何使用unity向构造函数注入参数_Vb.net_Unity Container_Asp.net Web Api - Fatal编程技术网

Vb.net 如何使用unity向构造函数注入参数

Vb.net 如何使用unity向构造函数注入参数,vb.net,unity-container,asp.net-web-api,Vb.net,Unity Container,Asp.net Web Api,您好,我在WebAPI 1.0中使用unity,并在Global.asax.vb文件下注册,如下所示 Dim container As IUnityContainer = New UnityContainer() container.RegisterType(汽车的)(新注入构造函数(GetType(Integer))) 现在,如何使用 Public Sub New(ByVal intUserId As Int32) objCar = DependencyResolver.Curren

您好,我在WebAPI 1.0中使用unity,并在Global.asax.vb文件下注册,如下所示

Dim container As IUnityContainer = New UnityContainer()
container.RegisterType(汽车的)(新注入构造函数(GetType(Integer)))

现在,如何使用

Public Sub New(ByVal intUserId As Int32)
    objCar = DependencyResolver.Current.GetService(Of car)()     

End Sub

在DependencyResolver中找不到任何要使用的内容(ParameterOverride(“intUserId”,intUserId))

这与在ASP.NET MVC中注册unity容器非常相似。尽管web api有不同的执行管道。请遵循以下步骤

注意:我已经使用转换器将这段代码从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控制器中声明您的依赖项,它将由Unity注入

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
'=======================================================

您的类型注册也是错误的。必须将接口或抽象类指定为依赖项,将其具体实现指定为映射

e、 g container.RegisterType(属于IContext,Context)()


我不明白通过将整数值映射到car来实现什么。是否希望根据参数中的整数值加载car对象?

您的类型注册也错误。是否需要使用接口?接口还是抽象类。否则它将如何被视为依赖关系?不幸的是,我必须使用concreate对象,并且没有选择余地。上面的代码只是一个示例代码,在这里,我需要创建一个car对象,构造函数将userid作为参数,在这种情况下,实际上不需要单元。。unity(或任何DI容器)如果您有ICar接口,并且您有多个ICar实现,那么这将非常有用,但在那时您不知道实际的实现,那么您可以在那里解析其类型,但肯定不能使用ID进行查询。DI不是这样工作的。好的,我将让相应的项目开发人员创建一个接口。那么,如果有两个构造函数,一个接受某个int值,另一个接受某个对象,该如何指定用于创建实例的构造函数呢?RegisterType(ICar的)(新注入构造函数(GetType(Integer)))并将实际构造函数标记为