2010-11-23 2 views
0

В моем настольном приложении у меня возникла проблема с использованием функции в классе Interface.Интерфейсный класс в C#

У меня есть функция, как это для выполнения плагин

public static string ExecutePugin(string PluginName, string ConnectionString) 
{ 
    //ToDo: Get the plugin dll in the memory in a different appdomain. call RunAnalysis method of that 
    //ToDo: shift the primary key checking method to inside the plugin and return the result back. 

    //Loads the IMFDBAnalyserPlugin.exe to the current application domain. 
    AppDomain.CurrentDomain.Load("IMFDBAnalyserPlugin"); 

    // Load the plugin's assembly to the current application doamin. 
    Assembly oAssembly = AppDomain.CurrentDomain.Load(PluginName); 

    // This block of code will execute the plugin's assembly code. 
    foreach (Type oType in oAssembly.GetTypes()) 
    { 
     if (oType.GetInterface("IMFDBAnalyserPlugin") != null) 
     { 
      object oPlugin = Activator.CreateInstance(oType, null, null); 
      ((MFDBAnalyser.IMFDBAnalyserPlugin)oPlugin).ExecutePlugin(); 
     } 
    } 
    return string.Empty; 
} 

где класс IMFDBAnalyserPlugin является интерфейсом и содержит код, как этот

using System; 
using System.Collections.Generic; 

using System.Linq; 
using System.Text; 

namespace MFDBAnalyser 
{ 
    public class IMFDBAnalyserPlugin 
    { 
     void ExecutePlugin(); 
    } 
} 

, но на строительство проекта я получаю ошибку в MFDBAnalyser .IMFDBAnalyserPlugin as

Ошибка 1 Название типа «IMFDBAnalyserPlugin» не существуют в типе D 'MFDBAnalyser.MFDBAnalyser': \ Projects \ Mindfire \ GoalPlan \ MFDBAnalyser \ MFDBAnalyser \ PluginManager.cs 57 107 MFDBAnalyser

может кто-нибудь помочь мне

+0

В C# нет `интерфейса класса ', только` interface` или `class`. Я думаю, должен быть `интерфейс IMFDBAnalyserPlugin`, иначе он не будет компилироваться. – 2010-11-23 06:02:21

+0

... просто FYI, это не интерфейс ... – 2010-11-23 06:05:38

ответ

1
namespace MFDBAnalyser 
{ 
    interface IMFDBAnalyserPlugin 
    { 
     void ExecutePlugin(); 
    } 
} 

В противном случае oType.GetInterface("IMFDBAnalyserPlugin") будет всегда нулевым, потому что там нет такого интерфейса.

2

Вы, включающую в себя MFDBAnalyser в usings в главный класс?

Что-то вроде

using MFDBAnalyser; 

в PluginManager?

Кроме того,

вы должны изменить

public class IMFDBAnalyserPlugin 
{ 
    void ExecutePlugin(); 
} 

в

public interface IMFDBAnalyserPlugin 
{ 
    void ExecutePlugin(); 
} 

Посмотрите interface (C# Reference)

Смежные вопросы