2012-02-16 3 views
0

Это может быть простой вопрос, но я не уверен, как это сделать.как вызвать файл C# класса lib без ссылки dll

У меня есть библиотека классов, называемая (service.cs).

У меня есть служба WCF, оба находятся в одном решении. Вот что я пытаюсь сделать, пытаюсь вызвать метод service.uploading() класса сервиса из моего контракта на обслуживание в wcf и передать значение.

namespace MyService 
{ 
    class MyService : IServiceContract 
    { 


     public void Insert(string Name) 
     { 


      if (core == true) 
      { 

       Upload(XmlFile); 
      } 
      else 
      { 


      } 
     } 

здесь образец файла библиотека классов

namespace Service 
{ 
    class upload 
    { 
     public void Uploading(string file) 
     { 
     console.writeline(file) 
    } 
    } 
} 
+0

Usher, пожалуйста, добавить то, что вы пытались сделать, что сообщение об ошибке вы получаете от компилятора и т.д ... Это трудно ответить, когда вопрос не ясно ... –

+0

@dtb и casperone сожалеют об этом, не упомянув четко. – Usher

ответ

1

Ваш пример не очень понятно, но я предполагая, что вы хотите позвонить Upload.Uploading() met это в библиотеке классов.

Лучший способ сделать это, чтобы создать интерфейс, например:

public interface IUploader 
{  
    void Upload (string name); 
} 

и есть внешняя библиотека классов реализовать:

public class Uploader : IUploader 
{ 
    public void Upload(string name) 
    { 
     // Do the logic. 
     Console.WriteLine(name); 
    } 
} 

Теперь, используйте этот код в ваш главный программа:

public void Insert (string filename) 
{ 
    var classLib = System.Reflection.Assembly.Load("MyClassLibrary.dll"); 
    var type = classLib.GetType("MyClassLibrary.Uploader"); //FULL NAME with namespace.; 
    IUploader uploader = Activator.CreateInstance(type) as IUploader; 

    uploader.Upload(filename); 
} 

Что вы делаете, это динамическая загрузка библиотеки классов (строка 1), динамически g (тип 2) и создание его экземпляра (строка 3).

Это важно иметь это реализовать интерфейс, как IUploader, который, как известно, к основной программе, так что знает, как справиться с этим, как вызвать его метод Загрузить() и т.д.

+0

Зачем фактически вставлять полное имя? Когда вы можете просто посмотреть какой-то атрибут (custom), вам не нужно указывать какие-либо имена, тогда у вас не будет никакой связи между именем и используемой вами сборкой. – IamStalker

+0

Еще одна вещь, которую вы забыли о Dependency Injection – IamStalker

+0

Я бы даже избегал пользовательских атрибутов и просто перебирал GetTypes() в Assembly, который ищет все, что реализует IUploader, но все это немного выходит за рамки. Сначала дайте OP ознакомиться с основными понятиями отражения и сборки, иначе это большой беспорядок кода, который не имеет смысла без контекста. –

0

Использование

using Service; 

перед

namespace MyService 
{ 
    // ... 
} 
0

Не уверен, что именно то, что вы пытаетесь сделать .. в заголовке говорится без ссылки dll? Где находится класс Service.upload? То же решение?

Если это так, вы можете ссылаться на пространство имен с помощью оператора using, как заявил Никил.

Пример:

using Service; 

namespace MyService 
{ 
    class MyService : IServiceContract 
    { 
     public void Insert(string Name) 
     { 
      if (core == true) 
      { 
       var uploader = new Upload(); 
       uploader.Uploading(XmlFile); 
      } 
      else 
      { 

      } 
     } 
    } 
} 


namespace Service 
{ 
    class Upload 
    { 
     public void Uploading(string file) 
     { 
      console.writeline(file) 
     } 
    } 
} 
+0

класс service.upload, расположенный в том же решении. – Usher

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