我在 ASP.NET MVC 中开发了 Web 应用程序,使用 StructureMap DI 模式从 BAL 检索数据到 UI,并使用分层架构模式从 DAL 检索数据到 BAL。在下面找到我的类图。
所以,我厌倦了将 StructureMap 服务注册为
public class Bootstrapper
{
public static void Initialize()
{
StructureMapConfiguration.AddRegistry(new ServiceRegistry());
}
public class ServiceRegistry : Registry
{
protected override void configure()
{
ForRequestedType<IVehicleService> ().TheDefaultIsConcreteType<VehicleService>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,配置未正确应用,出现错误并说“在接口类中找不到某些方法”。当然,它是正确的。因为在我的 BAL 类中从 DAL 继承了一些方法/函数。所以,请帮助我解决这个问题或提供任何最佳实践来应用我的项目。
我建议你重新考虑你的类的组织方式,并尝试应用依赖倒置原则。您构建类的方式,您的 UI 项目将取决于您的 BAL 项目,这将取决于您的 DAL 项目。您希望与数据库(在 DAL 中)对话的具体细节取决于抽象(在 BAL 中),而不是相反。您可以通过实施洋葱架构(又名端口和适配器或六边形架构)轻松实现这一点。我有一个简短的在线课程,内容涵盖从传统的 N 层架构(如您的)转换为这种方法。
另外,我认为您打算在类图中使用存储库模式,而不是呼吸模式。您还可以看到一种在 ASP.NET MVC 5 中使用 StructureMap开始解析依赖项的简单方法。
一旦你建立了这个架构,事情就会变得非常简单。如果您一致地命名您的接口,您可以使用 StructureMap 的 WithDefaultConventions() 方法来消除将每个具体类型注册到其关联接口的需要。例如,您可以定义 IVehicleRepository(在您的 Core 项目中)及其实现 VehicleRepository(在您的基础设施项目中,它引用了 Core)。此时,在您配置 StructureMap 的 UI 项目中,您的控制器可以简单地在其构造函数中请求一个 IVehicleRepository,并且 StructureMap 将使用您的 VehicleRepository 实现来满足此类请求(除非您将其配置为其他方式)。
| 归档时间: |
|
| 查看次数: |
492 次 |
| 最近记录: |