所以我有一个程序是一个 3 层程序,即 UI、BLL(业务逻辑层),当然还有 DAL(数据访问层)。UI 总是与 BLL 对话,BLL 使用 DAL 检索数据单元,以某种格式组装它们并将它们返回给 UI。
因为这是我的工作,所以我想确保始终使用约定(不是每个人都可以在任何地方编写自己的风格的忠实粉丝!)。所以我认为有这样的东西会很好。
using (Bll.MyService service = new Bll.MyService()) {
//My Sweet Code
}
但!!!如果 Bll 位于我的 UI 不在的命名空间中,则这不是一个选项。这是我的意思的一个更冗长的例子。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MyApp;
//Entry point
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//I want to be able to do a using MyApp and access the Bll objects!
Bll.ApiService service = new Bll.ApiService(); //ERROR LINE
}
}
}
//Data access layer
namespace MyApp.DAL
{
class ApiDataAccessor
{
public int MyVar = 1;
}
}
//The bacon letuce layer of course
namespace MyApp.Bll
{
class ApiService
{
public void MyFunction()
{
//todo: make more awesome
}
}
}
如果有人有任何建议,那就太好了!谢谢!
编辑:
在代码中的注释中添加了//ERROR LINE
,以使错误显而易见。我还发现了一个黑客。 using Bll = MyApp.Bll
这将强制Bll.ApiService
使用。我不知道我是否喜欢这个解决方案(因为它很容易搞砸和生气,直到我意识到我没有给命名空间起别名)。
编辑(再次):
有几个解决方案。
using Bll = MyApp.Bll
在顶部,然后必须引用该命名空间中的所有对象,Bll.MyObject
这就是我们想要的!需要完全限定的名称。
MyApp.Bll.MyObject
. 这是我们不想要的(因为它可能会因大命名空间而变得冗长)只需在顶部包含名称空间。
using MyApp.Bll
.
总而言之,我们希望以using MyApp
某种方式允许我们引用所有这些命名空间及其对象Bll.ThisObject
,Dal.ThatObject
但是,如果这是所需的解决方案,那么实现这一目标的唯一方法是包含 2 个 using 语句,它们是别名。 using Dal = MyApp.Dal
和using Bll = MyApp.Bll
感谢大家的帮助。
这是解决方案
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MyApp;
using Bll = MyApp.Bll;
//Entry point
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//I want to be able to do a using MyApp and access the Bll objects!
Bll.ApiService service = new Bll.ApiService(); // <-- it works.
}
}
}
//Data access layer
namespace MyApp.DAL
{
class ApiDataAccessor
{
public int MyVar = 1;
}
}
//The bacon letuce layer of course
namespace MyApp.Bll
{
class ApiService
{
public void MyFunction()
{
//todo: make more awesome
}
}
}