Jump to content

Duvida Assembly, Runtime, Types


andreb

Recommended Posts

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

...

Link to comment
Share on other 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

Link to comment
Share on other 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.

...

Link to comment
Share on other sites

Pois... Eu pensei nessa possibilidade (pergunta 3).

A propósito, já considerou a possibilidade de utilizar o Microsoft Extensibility Framework (MEF) ao invés de criar toda a sua arquitectura de plugins de raiz?

Microsoft Extensibility Framework (MEF)

http://www.codeplex.com/MEF

Cumprimentos,

Caio Proiete

Link to comment
Share on other 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.

...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.