Vb.net 如何使用unity向构造函数注入参数
您好,我在WebAPI 1.0中使用unity,并在Global.asax.vb文件下注册,如下所示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
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)))并将实际构造函数标记为