.NET MVC:在许多未编译的.cs文件中运行一段代码?

时间:2011-11-15 11:09:54

标签: c# asp.net-mvc

我目前正在构建一个Web应用程序,它将从数据库中获取一些信息,并用该信息替换Word文档中的一些文本。然后文档将保存到预定义的位置。

现在的问题是,当开发开始时我们讨论的是5个文档,但现在我们正在考虑20个以上,文档可能会随着时间而改变。我的初步想法是为每个文档“硬编码”类。但现在这似乎是一个非常愚蠢的想法。

该方法的签名可能类似于:void Generate(string template, string outputFileName);。这是如何以最好的方式完成的?假设我创建了一个接口IGenerator,它定义了Generate方法和一些描述当前“插件”的方法。我可以简单地将.cs文件(或dll)与在某个目录中实现该接口的单个​​类放在一起,然后让应用程序找到所有这些并让用户选择一个吗?

编辑:是否有一种添加/编辑/删除这些Document类的好方法,而无需使用所有类重新编译整个应用程序或库?我希望每个文档类都能代表它自己。我读过这个article,这可能是我最好的选择?

感谢。

1 个答案:

答案 0 :(得分:0)

我会考虑使用工厂模式来生成文档实例,如果需要处理不同的文档类型,那么考虑使用Document抽象类来公开可重写的方法,以便从文档中获取数据。

然后编写代码来处理Document类而不是特定的子类,因为代码的其余部分不关心文档是什么,只是处理文档。

然后,您需要实现一个Document子类来处理不同的文档类型(Word .doc,.docx; Excel,Text等),并使用{生成正确类的实例{1}}传递变量的工厂,以确定创建正确的Document子类。

如果您要在任何时间存在多个文档,那么您可以将它们的实例存储在Document中。

修改

根据你到目前为止的说法,这是我的想法。 您实际上只处理Office文档,因此您可以使用Office SDK,在这种情况下,您需要加载适当的库,或者如果您坚持使用Open XML格式文档,您可以自己生成它们。

有关Office文档格式的信息,请查看here

在任何情况下,您都会处理Word文档或Excel文档,但您可能有多个Word文档的布局。

如果您编写文档类以接受某种类型的模板信息,那么您可以将其以XML格式存储在数据库中或配置文件中。

如果存储在配置文件中,则将其作为数据源从List<Document>引用,例如

web.config

通过这种方式,您可以对<appSettings datasource="different.config"/> 中存储的appSettings进行更改,而无需重新启动您的网页。