2011-04-06 76 views
2

非同步控制器获取功能我是从一个标准的MVC控制器子类化基地控制器。这容器专用于控制器的许多有用的方法。Asp.net MVC - 从我的基本控制器

我现在需要在我的新控制器的一个部分asych功能

然而,要做到这一点,你需要创建一个控制器子类AsyncController

但我也想在我的基地来访问功能控制器

显然多重继承是不可能的

让我怎么解决这个得到什么?

回答

1

你可以外部化你愿意重用到服务层,行为过滤器,过滤器的授权,模型绑定的功能,...这将取决于你愿意重用,让你可以轻松地切换基本功能控制器到异步控制器,并仍然保留功能。如果你想使用异步控制器,你将需要从AsyncController派生。

+0

假设为参数的缘故我希望所有可用在我的基本控制器与基似乎此功能存在正确的位置的功能。这似乎是一个奇怪的决定,迫使你继承一个特定的控制器,使其成为asych。它会强制使用脆弱/重复的继承层次结构 - 除非我错过了某些东西。 (这当然不是闻所未闻的) – josedelascasa 2011-04-06 20:03:04

+0

@josedelascasa,没有你是不是缺少什么。这是框架设计者决定实现这一点的方式。有些批评人士反对他们使用抽象类而不是接口,但事实就是这样,我们无法做太多的事情。 – 2011-04-06 20:07:15

0

您可以让您的控制器类继承IAsyncManagerContainerIAsyncController,然后自己实现此功能,也许使用MVC源代码中的代码。你甚至可以把它封装在你自己的类中,你可以把这个功能委托给它。

+0

是的,这不是一个坏主意。我反过来思考这个问题 - 手动实施Icontroller。但你的方式会减少工作量。感谢 - 将离开这个问题打开的那一刻,虽然 – josedelascasa 2011-04-06 21:13:44

+0

其他建议,但仍不得不重复这对于每个需要非同步的功能虽然 – josedelascasa 2011-04-06 21:15:20

+0

@josedelascasa控制器 - 这就是为什么我建议在其自己的类封装的代码,然后委托调用。您必须手动为每个控制器实施方法,但这只是一些样板代码的问题。你甚至可以使用代码片段来自动化它。 – 2011-04-06 21:17:16