我有两个项目:Menu和Module,它们都位于同一名称空间foobar。
我目前正在从菜单项目中引用模块项目,以在菜单中的选项卡控件上打开某些控件。但是,我需要从我的一个控件启动一个新控件,该控件位于Module项目中。
当我尝试引用菜单项目时,当我尝试使用using引用它时,它不会显示在我的intellisense中。我在逻辑上做错了吗?
这是一个例子:
项目菜单
Public Void LaunchWPFControl(string pHeader,string pPath)
{
//Code goes here to launch a WPF control in the browser
}
项目模块
//What I would love to do but doesn't work
Using Menu;
...
...
...
private void dgModule_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
Menu.LaunchWPFControl("Accounts","AccountsControl");
}
答案 0 :(得分:4)
如果您正在谈论单独的项目,那么您在此处尝试做的是循环引用,这是不允许的。如果项目菜单引用了项目模块,则项目模块无法引用项目菜单。
如果您需要Project Module中的类来触发Menu项目中的某些内容,您需要寻找另一种方法。实现此目的的一种可能技术是在Module项目的类中创建一个事件,Menu项目可以订阅该事件并执行所需的操作。
例如,在项目模块中:
private void dgModule_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
OnMyEvent();
}
private void OnMyEvent()
{
EventHandler localEvent = MyEvent;
if(localEvent != null)
{
localEvent(this, EventArgs.Empty);
}
}
然后在“项目菜单”中,您可以订阅此活动并执行操作:
...
...
...
moduleClass.MyEvent += SomeHandler;
...
...
...
private void SomeHandler(Object sender, EventArgs e)
{
Menu.LaunchWPFControl("Accounts","AccountsControl");
}
正如Ray Burns所提到的那样(参见注释)另一种方法是在某个共享位置(有引用的项目或其他一些共享项目)中定义Menu类的接口,而不是将该接口的实现传递给模块项目。
哪种方式更好通常取决于您尝试使用每个项目实现的抽象。
答案 1 :(得分:0)
如果它们都在命名空间foobar
中,则需要
using foobar;
而不是using Menu
。
了解所涉及的术语非常重要 - 您正在谈论“同一集会中的不同项目” - 这是荒谬的。 Visual Studio为每个项目创建一个程序集。然后,您将在问题文本中讨论具有相同命名空间的项目。你需要了解其中的差异。
要计算出类型的名称空间,请打开包含该类型的类并查找名称空间声明:
namespace MyProject
{
...
}
要计算出类型的程序集,请查看声明它的项目的项目属性 - 或者如果您使用相同的解决方案,只需添加项目中的引用即可希望使用类型到声明类型的项目。
请注意,您使用using
指令指定名称空间;您需要在解决方案资源管理器中添加对程序集的引用。他们没有做同样的事情。 using
指令只是说,“在受此using指令影响的代码中,我希望能够在此命名空间中使用类型,而无需完全限定名称。”
接下来你有这样的代码:
Menu.LaunchWPFControl("Accounts","AccountsControl");
我认为Menu
是项目名称或命名空间 - 但现在您尝试将其用作类型名称。这是什么?
如果这不能解决您的问题,请发布完整的代码以及所涉及的项目和命名空间的更一致的描述。退后一步,找出所涉及的类型,命名空间和程序集,然后清楚地完成所有工作。
答案 2 :(得分:0)
所以Project Menu引用了Project Module。那么您希望Project Module引用Project Menu,以便模块可以直接调用Menu功能吗?
这是不可能的,这是一个循环引用。如果您尝试将Menu引用添加到Module项目,Visual Studio将不允许您。
你需要将菜单中的东西从菜单中取出,菜单和模块都要用于第三个项目,并让它们都引用它。或者将菜单和模块组合到一个项目中。