我正在研究一个场景,我将使用RazorGenerator在两个不同的MVC站点之间共享我的MVC视图,我想知道是否有可能将控制器的部分实现放在另一个程序集中并且T4MVC接受另一个程序集中定义的方法。
所以,例如,像这样:
MVC Library / HomeController.cs
namespace SharedNameSpace ...
public partial class HomeController
{
public virtual ActionResult SomeSharedAction() { return View(); }
}
MVC ProjectA / HomeController.cs - ProjectA引用“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显示latest documentation for vs2008虽然
答案 0 :(得分:0)
我意识到我的一个假设是不正确的,并且您不能在程序集中声明部分类,因此由于其他原因无法实现所需的效果。