두 MVC 사이트간에 MVC 뷰를 공유하기 위해 RazorGenerator를 사용할 시나리오를 검토 중이며 컨트롤러의 부분 구현을 다른 어셈블리에 넣고 T4MVC를 사용할 수 있는지 궁금합니다. 다른 어셈블리에 정의 된 메소드를 선택하십시오.T4MVC를 구성하여 다른 어셈블리에 정의 된 메서드를 찾을 수 있습니까?
그래서, 예를 들어,이 같은 :
MVC 라이브러리/HomeController.cs
namespace SharedNameSpace ...
public partial class HomeController
{
public virtual ActionResult SomeSharedAction() { return View(); }
}
MVC PROJECTA/HomeController.cs-PROJECTA이 참조가에 "MVC 라이브러리" 프로젝트
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);
}
...하지만 나는 그것의 Members
가 결정되는 방법을 결정하는 CodeClass2
의 정의를 찾을 수 없습니다. (CodeClass2
은 일반적인 형식입니까?) 참조 된 어셈블리에 정의 된 부분 클래스의 메서드를 찾기 위해이 방법을 변경할 수 있습니까? T4가 리플렉션의 모든 기능에 액세스 할 수 있는지 여부는 확실하지 않습니다.
편집 : CodeClass2
에 대한 자세한 정보를 발견했습니다. 분명히 이름 때문에 예상치 못한 MS 유형입니다. MSDN에서 latest documentation for vs2008을 표시하지만
이 사람이이 질문과 같은 일을 요청하는 경우 잘 모르겠어요,하지만 난 관련 보인다이 링크를 발견 https://t4mvc.codeplex.com/discussions/570079 – DLeh