Как загрузить блок во времени выполнения и создать экземпляр класса?

Вообще говоря, у меня складывается впечатление, что NAnt предлагает большую гибкость по сравнению с MSBuild, тогда как (с моими относительно простыми потребностями) я до сих пор был в порядке с последним.

18
задан daniele3004 8 March 2018 в 10:50
поделиться

2 ответа

Если ваша сборка находится в GAC или bin, используйте имя сборки в конце имени типа вместо Assembly.Load ( ) .

object obj = Activator.CreateInstance(Type.GetType("DALL.LoadClass, DALL", true));
20
ответ дан 30 November 2019 в 07:50
поделиться

Вы должны использовать динамический метод с для улучшения. он быстрее, чем отражение ..

Вот пример кода для создания объекта с использованием динамического метода ..

public class ObjectCreateMethod
{
    delegate object MethodInvoker();
    MethodInvoker methodHandler = null;

    public ObjectCreateMethod(Type type)
    {
        CreateMethod(type.GetConstructor(Type.EmptyTypes));
    }

    public ObjectCreateMethod(ConstructorInfo target)
    {
        CreateMethod(target);
    }

    void CreateMethod(ConstructorInfo target)
    {
        DynamicMethod dynamic = new DynamicMethod(string.Empty,
                    typeof(object),
                    new Type[0],
                    target.DeclaringType);
        ILGenerator il = dynamic.GetILGenerator();
        il.DeclareLocal(target.DeclaringType);
        il.Emit(OpCodes.Newobj, target);
        il.Emit(OpCodes.Stloc_0);
        il.Emit(OpCodes.Ldloc_0);
        il.Emit(OpCodes.Ret);

        methodHandler = (MethodInvoker)dynamic.CreateDelegate(typeof(MethodInvoker));
    }

    public object CreateInstance()
    {
        return methodHandler();
    }
}

//Use Above class for Object Creation.
ObjectCreateMethod inv = new ObjectCreateMethod(type); //Specify Type
Object obj= inv.CreateInstance();

Этот метод занимает всего 1/10 времени, необходимого для Activator.

Проверьте http: // www .ozcandegirmenci.com / post / 2008/02 / Create-object-instance-Faster-than-Reflection.aspx

12
ответ дан 30 November 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: