是否可以将 T4MVC 配置为查找在另一个程序集中定义的方法

本文关键字:程序集 程序 另一个 集中 定义 方法 查找 T4MVC 配置 是否 | 更新日期: 2023-09-27 18:35:32

我正在研究一个场景,在这种情况下,我将使用 RazorGenerator 在两个不同的 MVC 站点之间共享我的 MVC 视图,我想知道是否有可能将控制器的部分实现放在另一个程序集中,并让 T4MVC 选取另一个程序集中定义的方法。

例如,像这样:

MVC 库/家庭控制器.cs

namespace SharedNameSpace ...
public partial class HomeController
{
    public virtual ActionResult SomeSharedAction() { return View(); } 
}

MVC ProjectA/HomeController.cs - Project A 引用了"MVC Library"项目

namespace SharedNameSpace ...
public partial class HomeController
{
    public virtual ActionResult IndexA() 
    {
        return Partial(MVC.Home.SomeSharedAction(), new { }); 
    } 
}

我尝试查看.tt文件以确定 T4MVC 如何发现这些方法,但在识别这一点时遇到了一些麻烦。以下是我找到的一些相关代码:

foreach (CodeFunction2 method in GetMethods(type))
{
    ...
    controllerInfo.ActionMethods.Add(new ActionMethodInfo(method, current));
}
static IEnumerable<CodeFunction2> GetMethods(CodeClass2 codeClass)
{
    // Only look at regular method (e.g. ignore things like contructors)
    return codeClass.Members.OfType<CodeFunction2>()
        .Where(f => f.FunctionKind == vsCMFunction.vsCMFunctionFunction);
}

。但我找不到CodeClass2的定义来确定其Members是如何确定的。(CodeClass2是泛型类型还是什么?有没有办法改变它来查找在引用程序集中定义的分部类的方法?不确定 T4 是否可以访问反射的所有功能。

编辑:我找到了更多关于CodeClass2的信息,显然它是一种MS类型,由于名称而出乎意料。MSDN 显示了 vs2008 的最新文档

是否可以将 T4MVC 配置为查找在另一个程序集中定义的方法

我意识到我的一个假设是不正确的,并且您不能跨程序集声明分部类,因此由于其他原因,不可能达到预期的效果。

参考: https://stackoverflow.com/a/309944/526704