上記のコメントで、二次参照によってDALにアクセスできることを修正しました。Web プロジェクトで DAL を参照したくない場合は、BLL に Bootstrapper クラスを作成して、データベース関連の作業を行います。
例は次のブログ投稿から引用されています: http://weblogs.asp.net/rashid/archive/2009/02/17/use-bootstrapper-in-your-asp-net-mvc-application-and-reduce-コード-におい.aspx
ブートストラップ インターフェイスを作成する
public interface IBootstrapperTask
{
void Execute();
}
データベース構成を処理するクラスを作成します
public class InitializeDatabase : IBootstrapperTask
{
public void Execute()
{
Database.SetInitializer(new Configuration());
using (var db = new Context())
{
try
{
db.Database.Initialize(false);
}
catch (DataException ex)
{
}
catch (Exception ex)
{
throw;
}
}
}
}
タスクを実行する静的クラスを作成します (複数持つことができます。登録ルートは BootstrapperTask に移動できます)。
public static class Bootstrapper
{
static Bootstrapper()
{
ConfigureContainer();
}
public static void Run()
{
var tasks = ServiceLocator.Current.GetAllInstances<IBootstrapperTask>();
foreach(var task in tasks)
{
task.Execute();
}
}
private static void ConfigureContainer()
{
IUnityContainer container = new UnityContainer();
UnityConfigurationSection configuration = (UnityConfigurationSection) ConfigurationManager.GetSection("unity");
configuration.Containers.Default.Configure(container);
ServiceLocator.SetLocatorProvider(() => new UnityServiceLocator(container));
}
}
最後に、global.asax には 1 つのライナーが含まれます。
protected void Application_Start()
{
Bootstrapper.Run();
}
ブログの投稿に表示されるように、いくつかの web.config も実行する必要があります。また、この質問は、破棄などの詳細に関する情報を提供することができます。ブーストラップには、このパターンを使用することがなぜ良いことであるかについて、コミュニティの周りのいくつかの優れた投稿で DAL を参照する必要がないだけでなく、より多くの利点があります。実装に関するいくつかの異なるアプローチ。