レジストリDSLの例を使用して構造マップを構成しています。しかしこれにより、私の登録されたすべての型がアプリケーションのすべてのレイヤーで使用可能になり、構造マップへの参照が追加されます。ビジネス層に自分のデータアクセス層について何か知ってもらいたいのではない。私のレイヤーごとに特定のタイプのみを登録するように構造マップを取得するにはどうすればよいですか?ここでStructuremap - 特定のレイヤーで特定のタイプを登録する方法
は私のGlobal.asaxファイル内のコードです:
ObjectFactory.Initialize(x =>
{
x.AddRegistry<RegistryIOC>();
});
そして、ここでは私のRegistryIOCクラスです:助けを
public class RegistryIOC : SMRegistry
{
public RegistryIOC()
{
For<IProfileService>.Use<ProfileService>();
For<IProctorService>().Use<ProctorService>();
//Business Logic Objects
For<IQual>().Use<Qual>();
For<ITest>().Use<Test>();
For<IBoldface>().Use<Boldface>();
For<ITrainingPlan>().Use<TrainingPlan>();
For<IUnit>().Use<Unit>();
//Data Transfer Objects
For<IGenericDTO>().Use<GenericDTO>();
For<IProfileDTO>().Use<ProfileDTO>();
For<IQualDTO>().Use<QualDTO>();
For<IPermissionDTO>().Use<PermissionDTO>();
//Repository Objects
For<IProctorRepository>().Use<ProctorRepository>();
For<IQualsRepository>().Use<QualsRepository>();
For<ITestRepository>().Use<TestRepository>();
For<IUnitRepository>().Use<UnitRepository>();
For<IUserRepository>().Use<UserRepository>();
}
}
感謝。
あなたはどのような層について話していますか?異なるプロセスですか?異なるマシン?それらがすべて同じプロセスで実行されている場合は、おそらくビジネスレイヤーがデータレイヤー、具体的にはそのインターフェイスについて少し*知っているものを実行します。あなたが解決しようとしている問題は不明です。あなたのRegistryIOCクラスで何が問題になっていますか? –
サービスレイヤ、BLL、およびDALはすべて別々のプロジェクトです。各プロジェクトはStructureMapを参照します。 サービスレイヤーは他の2つのレイヤーを認識しますが、BLLとDALは互いに知りません。 DAL内からBusiness Objectsを使用している他の開発者を望んでいません。その逆もあります。開発者がBLL内からリポジトリオブジェクトを利用したいと思っていません。サービス層はそれをすべて解決します。 このようにすべてのタイプを登録すると、すべてのレイヤがすべてのレイヤ(プロジェクト)で使用可能になります。 –
さて、Composition Root以外のレイヤーからStructureMapへの参照を追加しないでください。 –