Métodos de extensão em montagens referenciadas?
Se eu tentar chamar meu método de extensão, que é definido assim:
Module LinqExtensions
<System.Runtime.CompilerServices.Extension()> _
Public Function ToSortableBindingList(Of TSource)(ByVal source As IEnumerable(Of TSource)) As IBindingList
If (source Is Nothing) Then
Throw New ArgumentNullException("source")
End If
Return New SortableBindingList(Of TSource)(New List(Of TSource)(source))
End Function
End Module
chamando
Dim sss As String()
sss.AsEnumerable.ToSortableBindingList()
ele fornece um erro "ToSortableBindingList não é um membro de System.Collections.Generic.IEnumerable (Of String)".
Nota: O Intellisense é preenchido automaticamente após o último período! Se eu tentar chamar context.TestTable.AsEnumerable.ToSortableBindingList (TestTable é uma classe gerada EF4 pura), ele nem aparece com o intellisense. Eu não entendo o porquê. O que há de errado com a declaração do método de extensão "ByVal source As IEnumerable (Of TSource)"?
*********************************** EDIT ************** ******************Ok, para esclarecer o que está acontecendo, gostaria de fornecer algumas informações adicionais. Posso rastrear o problema da seguinte maneira:
Cenário:
Assembly1 (espaço para nome raiz "myapp"):
...
<System.Runtime.CompilerServices.Extension()> _
Public Function ToTest(ByVal source As String) As String
Return ""
End Function
...
A chamada funciona:
...
Dim a as string
a.ToTest()
...
Assembly2: (referência ao Assembly1 incluída)
'A chamada não funciona:
imports myapp
...
Dim a as string
a.ToTest()