• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

andreb

Duvida Assembly, Runtime, Types

5 mensagens neste tópico

Boas, tenho uma duvida em relação a interfaces e assembly, é o seguinte tenho uma interface chamada IPlugin e respeita uma certa estrutura e criei um DLL com essa interface. Agora no programa estou a usar este bocado de codigo,

        public void LoadPlugin(string _file)
        {
            Assembly assembly = Assembly.LoadFile(_file);
            Type[] aTypes = assembly.GetTypes();
            foreach (Type type in aTypes)
            {
                if (!typeof(T).IsAssignableFrom(type))
                    continue;
                T loadedPlugin = (T)Activator.CreateInstance(type);
                _plugins.Add(loadedPlugin);
            }
        }

, para ler o dll, sendo T tambem do tipo IPlugin  mas o if (!typeof(T).IsAssignableFrom(type)) nao detecta o Type tirado do plugin como sendo igual ao tipo de T, alguem tem alguma sugestao?

Cumprimentos, Andreb.

PS: Se nao preceberam, avisem :X

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Não vejo nada errado com o código que mostrou, que possa causar esse comportamento que descreveu... Você tem certeza que:

1-) As classes que estão na DLL passada como parâmetro (_file) implementam de facto essa interface IPlugin?

2-) Tratando-se de uma classe Generic, você está a passar a interface IPlugin como T, na hora de construir o objecto da classe que possui o método LoadPlugin? Algo como:

PluginManager<IPlugin> manager = new PluginManager<IPlugin>();
manager.LoadPlugin(@"C:\FicheiroComPlugins.dll");

3-) Só existe UMA interface IPlugin, e esta é compartilhada entre o seu programa E as DLLs que implementam essa mesma interface, certo?

Cumprimentos,

Caio Proiete

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, não tinha visto o seu post mas á cerca de 30 minutos fui procurar de novo e encontrei um post a falar sobre o meu problema. O problema era que eu compilava o IPlugin no programa e tambem no DLL, e quando ia ler com esse pequeno codigo, dizia que não era do mesmo tipo visto que são compiladas duas vezes. Tive de criar uma DLL com o IPlugin e adicionar as referencias, para que fosse apenas compilado uma vez... Sendo assim tenho o problema resolvido.

Link do post: http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.languages.csharp/2008-01/msg02231.html (ingles)

Obrigado por tentar ajudar.

Cumprimentos, André B.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando comecei a ver isto dos plugins fui parar a esse site através do CodeProject, pois tinha la um exemplo com isso.. mas realmente prefiro criar de raiz pois fico a conhecer melhor o meu sistema ;), visto que quando vejo algum exemplo de código extenso, parece que não o compreendo, e tenho de escreve-lo de novo para o compreender.

Cumprimentos, André B.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora