Создайте экземпляр c # универсального типа, используя <cfobject>в реализации ColdFusion BlueDragon.NET - PullRequest
1 голос
/ 04 июня 2011

Используя новую реализацию ColdFusion BlueDragon.NET в Атланте, мы имеем возможность создавать экземпляры объектов C # .NET с использованием тега Cold Fusion. Например:

<cfobject name="list" type=".net" action="CREATE"
 class="System.Collections.ArrayList">

В одном случае, однако, нам нужно создать экземпляр универсального типа. Это работает для внутренних типов, таких как System.Int32:

<cfobject name="list" type=".net" action="CREATE"
 class="System.Collections.Generic.List`1[[System.Int32]]">

Но при использовании нашего собственного класса, квалифицированного на ассемблере, вроде следующего:

namespace Foo.Bar.Bam
{
    public class MyClassName
}

, который компилируется в сборку Foo.Bar.dll и используется так:

<cfobject name="list" type=".net" action="CREATE"
 class="System.Collections.Generic.List`1[[Foo.Bar.Bam.MyClassName,Foo.Bar]]">

происходит сбой с «Внутренней ошибкой сервера BlueDragon» со следующей трассировкой стека:

java.lang.ClassNotFoundException: Could not load file or assembly 'Foo.Bar]]' or one of its dependencies. The system cannot find the file specified.
   at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
   at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   at System.AppDomain.Load(String assemblyString)
   at com.nary.util.ClassUtils.forName(String className)
   at com.naryx.tagfusion.cfm.tag.cfOBJECT.render(cfSession session)
   at com.naryx.tagfusion.cfm.tag.cfTag.coreRender(cfSession _Session)
   at com.naryx.tagfusion.cfm.engine.cfSession.onRequest(cfFile requestFile)
   at com.naryx.tagfusion.cfm.engine.cfEngine.service(cfSession _Session)

Без квалификации сборки происходит сбой с ошибкой CFML:

Failed to load class, System.Collections.Generic.List`1[[Foo.Bar.Bam.MyClassName]]

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

1 Ответ

0 голосов
/ 04 июня 2011

Вы должны указать название вашей сборки (dll), а не ключевое слово Assembly.

Дано:

namespace Me
{
   public class Foo { }
}

и компиляция в MyStuff.Dll; класс будет

class="System.Collections.Generic.List`1[[Me.Foo, MyStuff]]">
...