代码之家  ›  专栏  ›  技术社区  ›  Steffen

ASP.NET MVC——如何实现灵活模块跨项目使用?

  •  2
  • Steffen  · 技术社区  · 15 年前

    我不是直接寻找代码,而是寻找一些如何最好地解决我的问题的想法。

    这是一个asp.net mvc应用程序。它应该是“高度模块化的”,许多部分必须在不同的项目中重用。

    我们当前的方法是使用托管扩展性框架在运行时导入程序集。这些通常包括工作所必需的一切:模型、视图和控制器。导入时会注册路由和导航/主菜单按钮。

    但是,问题是,虽然在大多数情况下,在程序集内传递的默认视图是合适的,但有时我希望导入的控制器显示在不同的视图中,在自定义布局中显示其他字段。我目前的方法是使模块中的动作方法成为虚拟的。如果另一个项目需要使用自定义视图呈现列表,我只需重写list方法,调用base方法来填充ViewData,然后简单地调用我想要的任何视图。不过,这感觉有点脏,如果有人知道更好的解决方案,我会非常感谢。

    我面临的另一个问题是,我可能希望导入的模型与其他表一起工作。我们将使用Fluent NHibernate,其中目标表是在ClassMap-table(“News”)中定义的。

    foreach(Assembly assembly in assemblies)
      configuration.Mappings(m => m.FluentMappings.AddFromAssembly(assembly));
    

    我不知道如何更改导入映射的表,但我想有一个简单的方法?

    谢谢你至少读了这个:)

    1 回复  |  直到 15 年前
        1
  •  0
  •   Doug Lampe    13 年前

    我不认为重写你的控制器操作会感到“肮脏”。事实上,我在一个公共库中使用基本控制器操作来实现一些很容易抽象的功能,比如用户身份验证。另一方面,身份验证通常是非常特定于UI的,所以我不需要创建可重用的视图。

    我也在我的应用程序中创建基本控制器类来处理创建/处理我的EF上下文等。

    您可能需要考虑抽象数据访问。即使你正在使用NHibernate和 实现使用特定的数据库模式,您遇到了一个相当典型的代码重用问题:在可重用包中放入太多特定逻辑。作为一般规则,我试图在可重用代码中保留任何数据库细节。我使用POCO对象和接口,因此可以使用任何类型的数据源来创建我的对象。然后,我可能会有另一个程序集,其中包含使用SQL server、EF、我的首选数据库架构等的标准实现。但是,如果我需要将其连接到新版本中的其他简单实现接口,则需要将其连接到新版本中。

    希望这能回答你的问题。