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

基于复杂模块的ASP.netmvc2数据库新建记录

  •  5
  • DevMania  · 技术社区  · 14 年前

    这将是很容易在正常情况下,你有一个网站上的工作,所以所有你要做的是

    • 将带有外键的新库表添加到Blog表。
    • 重新生成Linq2SQl代码并更新模型。
    • 在控制器中添加逻辑。

    但在我的情况下,这是复杂和时间繁琐,因为有两个原因

    • 客户决定在 为每个站点工作。

    • Dll,如何创建这样一个 到主应用程序
    • 什么是最好的 便携式区域内的程序,

    现在我们来谈谈模块插件的最大问题:)

    private  string GenerateId()
     {
      long i = 1;
      foreach (byte b in Guid.NewGuid().ToByteArray())
      {
       i *= ((int)b + 1);
      }
      return string.Format("{0:x}", i - DateTime.Now.Ticks);
     }
    ViewData["FK"] = GenerateId();
    

    但我担心的是

    • 这条路可行还是简单 愚蠢的。
    • 生成真正唯一的密钥。

    1 回复  |  直到 9 年前
        1
  •  2
  •   Dave Thieben    14 年前

    我觉得这是个很好的问题。不久前,我开始使用MVC1开发一个CMS项目,在那里我想支持插件。我让它工作,这样管理员可以把一个新的插件程序集放到bin文件夹,下一个应用程序启动时,它会扫描所有程序集的IPlugin(或任何东西)并加载它们。我将部分视图嵌入到插件程序集中,使其完全独立。每个插件被放置在一个页面上时都会被赋予一个唯一的标识符,插件的控制器知道如何使用这个ID来查询自己的表(存储库)中的数据。主应用程序对插件的模式一无所知。

    这里唯一的区别是,听起来像是在同一个数据库上运行多个网站,并且需要区分每个网站需要哪个插件实例。我假设你在某个地方有一个键,指示它是哪个网站,它可以通过外键为用户所在的页面选择该网站的插件。

    我不确定这是不是一个答案,我只是在大声思考。希望这能对讨论有所帮助。

    编辑:为了自动加载插件,我使用了NInject的能力来扫描程序集中的IModules。我的IPlugin继承自 Ninject.Modules.INinjectModule ,所有插件都实现了IPlugin接口。在应用程序启动时,我有以下几行代码:

    kernel.Load( "*.Plugin.dll" );
    

    其中kernel是Ninject.IKernel,该行将扫描与该文件模式匹配的任何程序集,因此我可以插入Weather.Plugin.dll之类的程序集。