Я использую вызовы jQuery ajax к веб-службам ASP.Net (файлы ASMX) для обновления данных веб-страницы.
У меня есть код для хранения базы данных, отдельный от кода класса объекта домена (в примере кода ниже)есть класс Animal и класс AnimalRepository).Я реализую соглашение, что все подобные классы репозитория объектов домена будут иметь метод Store.
Я хотел бы создать веб-сервис, который может обслуживать вызов метода Store для любого из этих классов репозитория.Чтобы это работало, в приведенном ниже примере кода параметр List (Of Animal) должен быть универсального типа.
Я пытался использовать List (Of Object), но ошибка команды Store при невозможностиконвертировать типы.Я не думаю, что могу привести List (Of Object) к нужному типу, так как он не известен до времени выполнения.
<WebMethod(True)> _
Public Sub StoreAnimals(ByVal _animals As List(Of Animal), ByVal _type As String)
Dim classType As Type = Type.GetType(_type & "Repository, MyCompany.Assembly")
Dim instanceOfClass = Activator.CreateInstance(classType)
Dim method As MethodInfo = classType.GetMethod("Store")
method.Invoke(instanceOfClass, New Object() {_animals})
End Sub
В идеале мне бы хотелось:
<WebMethod(True)> _
Public Sub StoreData(Of T)(ByVal _data As List(Of T), ByVal _type As String)
Dim classType As Type = Type.GetType(_type & "Repository, MyCompany.Assembly")
Dim instanceOfClass = Activator.CreateInstance(classType)
Dim method As MethodInfo = classType.GetMethod("Store")
method.Invoke(instanceOfClass, New Object() {_data})
End Sub
В определении метода веб-сервиса нет места для обобщений, но есть хитрость для достижения того же конечного результата.В противном случае я собираюсь создать множество таких веб-сервисов Store *, которые отличаются только по первому параметру.