2011-11-21 2 views
1

У меня есть решение с некоторыми проектами. Один из этих проектов - тот, который я определил как основной, а также его класс имеет основной метод.Доля переменных между проектами

В этом классе я определил некоторые свойства public и static. Я хочу, чтобы это доступ к этим свойствам из другого файла проекта. Например:

Проект A:

namespace Cobra 
{ 
    public static class Program 
    { 
     public static int A; 
     public static int B; 
... 

Проект B:

namespace Net 
{ 
    public class HttpHandler : IHttpHandler 
    { 
     ... 
     public void ProcessRequest() 
     int a =Cobra.Program.A; 
     int b =Cobra.Program.B; 
... 

Как я могу это сделать ??

EDIT: :

Если добавить проект Какой в качестве ссылки в проекте B «Добавление этого проекта в качестве ссылки, будет циклическая зависимость.»

Проект B содержат некоторые другие файлы, так что наличие ссылки на Project B в Проект А необходимо.

+1

ли проекты в том же растворе? Если так, просто включите проект в качестве ссылки. Если нет, вы можете использовать отражение для загрузки dll. – Ivo

+0

Да, но «использование Cobra» в B говорит мне, что тип или пространство имен не найдено. – Manu

+0

Вы добавили ссылку и выпилили проект без исключений – Ivo

ответ

5

В проекте B добавьте ссылку на проект A и добавьте оператор using Cobra в проект B, куда бы вы ни захотели получить доступ из пространства имен Cobra (Project A).

+0

Это не работает. Я попробовал это, прежде чем спрашивать здесь. «использование Cobra» в B говорит мне, что тип или пространство имен не могут быть найдены. – Manu

+3

Это работает, если нет, то вы не добавили ссылку. – CodeCaster

+0

Когда я пытаюсь добавить: «Добавив этот проект в качестве ссылки, будет циклическая зависимость». – Manu

2

Вы должны добавить ссылку на проект A проекта B - щелкните правой кнопкой мыши узел проекта в обозревателе решений, выберите ссылки, затем проекты затем Project A.

тогда Вы будете иметь доступ ко всем типам в проекте A.

См. this How To на MSDN.

+0

+1 для связи с практическим заданием :) – Tim

0

Вы должны добавить, используя директиву в верхней части файла проект Б:

using Cobra; 

И добавить проект А в качестве ссылки в проекте В.

+0

Когда я пытаюсь добавить ссылку: «Добавление этого проекта в качестве ссылки будет циклической зависимостью». – Manu

+0

Как @CodeCaster сказал в своем ответе: Тогда у вас уже есть ссылка на проект B в проекте A. Вы не можете этого сделать, как заявляет ошибка. – Tim

2

на основе ваших комментариев к другим ответам это звучит например, ваша проблема в том, что у вас есть круговая зависимость, которую вам нужно сломать. Как правило, способ сделать это факторизовать интерфейс и поместить его в третий проект, как и другие проекты могут ссылаться поэтому вместо

class Foo //foo lives in project 1 (depends on project 2) 
{ 
    public Bar GetNewBar() 
    { 
     return new Bar(this); 
    } 
    public void DoSomething(){} 
} 

public class Bar //bar lives in project 2 (depends on project 1 -- cant do this) 
{ 
    public Bar(Foo parent){} 
} 

у вас есть

class Foo: IFoo //foo lives in project 1 (depends on project 2 and 3) 
{ 
    public Bar GetNewBar() 
    { 
     return new Bar(this); 
    } 
    public void DoSomething(){} 
} 

public class Bar //bar lives in project 2 (depends on project 3) 
{ 
    public Bar(IFoo parent){} 
} 

public interface IFoo //IFoo lives in project 3 (depends on nothing) 
{ 
    void DoSomething(); 
} 
1

@Manu,

Можно через отражение. Ниже приведено решение вашей проблемы.

Вы создали 2 проекта

Проект B - наличие пространства имен «Net», класс «HttpHandler»

Проект А - наличие пространства имен «Кобра», статический класс «Программа» и с ссылкой на Проект B

Теперь ваша проблема заключается в том, что вам нужно получить доступ к классу «Программа» в проекте B без ссылки на проект A на проект B, потому что тогда решение не будет построено, так как оно даст циклическую ошибку ссылки.

Заканчивать следующие

Проект A

 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Net; 

namespace Cobra 
{ 
    public static class Program 
    { 
     public static int A { get; set; }//Getter/Setter is important else "GetProperties" will not be able to detect it 
     public static int B { get; set; } 

     static void Main(string[] args) 
     { 
      HttpHandler obj = new HttpHandler(); 
      obj.ProcessRequest(typeof(Program)); 
     } 
    } 
} 


Проект B

 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Reflection; 

namespace Net 
{ 
    public class HttpHandler : IHttpHandler 
    { 
     public void ProcessRequest(Type cobraType) 
     { 
      int a, b; 
      foreach (var item in cobraType.GetProperties(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy)) 
      { 
       if (item.Name == "A") 
        a = (int)item.GetValue(null, null);//Since it is a static class pass null 
       else if (item.Name == "B") 
        b = (int)item.GetValue(null, null); 
      } 
     } 
    } 
} 


Надежда это имеет некоторую помощь.

С уважением,

Samar

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