2010-04-14 21 views
1

Aide, voici l'idée:Appel Activator.CreateInstance dans une dll à intance classe qui résident à l'intérieur Asp.Net App_Code

External.dll 
IMyClass NewCreated = (IMyClass)Activator.CreateInstance(Namespace.MyClass).UnWrap(); 

----------------------------------------- 

Asp.Net WebSite 
    App_Code 
     Namespace.MyClass.cs 
    Bin 
     External.dll 

Est-ce même posible?

J'ai essayé, beaucoup de combinaisons Posible comme:

Assembly.GetCallingAssembly().CreateInstance("Namespace.MyClass") 
Activator.CreateInstance(AppDomain.CurrentDomain,"Namespace","Namespace.MyClass") 
Assembly.GetExecutingAssembly().CreateInstance("Namespace.MyClass") 

Répondre

1

Vous pouvez utiliser la propriété BuildManager.CodeAssemblies à la liste de tous les noms d'assemblage qui ont été compilés dans le répertoire App_Code. Vous pourriez être en mesure d'accomplir ce dont vous avez besoin de cette façon.

Le problème avec App_Code est que tout est compilé dynamiquement dans un assembly qui est par nature, temporaire. Cela vient avec un nom d'assembly temporaire. Cela rend impossible de coder en dur un nom ou un chemin d'assemblage.

+0

Merci beaucoup, voici le code complet pour initialiser n'importe quelle classe dans app_code d'une DLL. Activator.CreateInstance (((Assemblage) BuildManager.CodeAssemblies [0]). GetType ("Namespace.Class"), ConstructorParams1, ConstructorParams2); – Fraga

0

Inutile d'utiliser la propriété BuildManager.CodeAssemblies pour répertorier tous les noms d'assembly. Utilisez à la place:

type = "Namespace.MyClass, App_Code" pour référencer la classe.