在项目之间共享变量

时间:2011-11-21 08:58:06

标签: c# .net

我有一些项目的解决方案。其中一个项目是我定义为main的项目,他的班级也有一个主要方法。

在这个类中,我已经定义了一些属性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;
...

我该怎么做?

修改

如果我在项目B 中添加项目A 作为参考:“添加此项目作为参考,则会出现循环依赖关系。”

项目B 包含一些其他文件,因此需要在项目A 中引用项目B

5 个答案:

答案 0 :(得分:6)

在项目B中,添加对项目A的引用,并向项目B添加using Cobra语句,只要您想从Cobra(项目A)名称空间访问某些内容。

答案 1 :(得分:3)

您需要将项目A的引用添加到项目B - 右键单击​​解决方案资源管理器中的项目节点,选择引用,然后选择项目,然后选择项目A.

然后,您将可以访问项目A中的所有类型。

请参阅MSDN上的this How To

答案 2 :(得分:3)

基于您对其他答案的评论,听起来您的问题实际上是您有一个循环依赖,您需要打破。通常,这样做的方法是分解界面并将其放在第三个项目中,其他项目都可以引用,而不是

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();
}

答案 3 :(得分:1)

@Manu,

通过反思是可能的。以下是您的问题的解决方案。

您已创建了2个项目

项目B - 名称空间为“Net”,类为“HttpHandler”

项目A - 拥有名称空间“cobra”,静态类“程序”并参考项目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);
            }
        }
    }
}


希望这有一些帮助。

此致

萨马

答案 4 :(得分:0)

您需要在项目B的文件顶部添加using指令:

using Cobra;

在项目B中添加项目A作为参考。