Usando classes genéricas com ObjectDataSource
Eu tenho uma classe genérica de Repositório <T> que quero usar com um ObjectDataSource. O repositório <T> reside em um projeto separado chamado DataAccess. De acordo comesta publicação dos grupos de notícias da MS (parte relevante copiada abaixo):
Internamente, o ObjectDataSource está chamando Type.GetType (string) para obter o tipo, por isso precisamos seguir a diretriz documentada em Type.GetType sobre como obter o tipo usando genéricos. Você pode consultar a Biblioteca do MSDN em Type.GetType:
http: //msdn2.microsoft.com/en-us/library/w3f99sx1.asp
No documento, você aprenderá que precisa usar backtick (`) para indicar o nome do tipo que está usando genérico
Além disso, aqui devemos especificar o nome do assembly na cadeia de nome do tip
Então, para sua pergunta, a resposta é usar o nome do tipo da seguinte maneira:
TypeName = "TestObjectDataSourceAssembly.MyDataHandler`1 [System.String], TestObjectDataSourceAssembly"
Ok, faz sentido. Quando eu tento, no entanto, a página lança uma exceção:
<asp:ObjectDataSource ID="MyDataSource" TypeName="MyProject.Repository`1[MyProject.MessageCategory],DataAccess" />
[InvalidOperationException: o tipo especificado na propriedade TypeName de ObjectDataSource 'MyDataSource' não pôde ser encontrado.]
O curioso é que isso só acontece quando estou visualizando a página. Quando abro a caixa de diálogo "Configurar fonte de dados" no designer do VS2008, ela mostra corretamente os métodos na minha classe Repository genérica. Passar a string TypeName para Type.GetType () durante a depuração também retorna um tipo válido. Então, o que dá?