だから私は3層プログラム、UI、BLL(ビジネスロジックレイヤー)、そしてもちろんDAL(データアクセスレイヤー)であるプログラムを持っています。UI は常に、DAL を使用してデータ ユニットを取得する BLL と通信し、データ ユニットを形式にまとめて 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
と、これらすべての名前空間とそのオブジェクトを and のように参照できるようにし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
}
}
}