Генерация кода T4: типы доступа в текущем проекте - PullRequest
17 голосов
/ 20 июля 2009

Используя генерацию кода T4, возможно ли получить доступ к типам, определенным в текущем проекте?

Например, если у меня есть интерфейс, и я хочу делегировать его реализацию другому классу, т.е.

interface IDoSomething {
    public void do_something();
}

class DoSomethingImpl : IDoSomething {
    public void do_something() {
        // implementation...
    }
}

class SomeClass : IDoSomething {
    IDoSomething m_doSomething = new DoSomethingImpl();

    // forward calls to impl object
    public void do_something() {
        m_doSomething.do_something();
    }
}

Я бы хотел автоматизировать переадресацию вызовов в SomeClass с генерацией кода; это возможно?

1 Ответ

1 голос
/ 16 мая 2011

Хотя это не решает проблемы с блокировкой (хотя я слышал, что VS2010 делает), вы можете попробовать скопировать dll во временную папку и просто использовать эту скопированную сборку.

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".txt" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.IO" #>
<#    
var newFileName = System.IO.Path.GetTempFileName();
System.IO.File.Copy(@"C:\Development\CustomAssembly.dll",newFileName,true);

var assembly = Assembly.LoadFrom(newFileName);
var type = assembly.GetType("CustomAssembly.DummyClass");   
#>
<#=newFileName#>
<#=type#>
...