标签: activator

Activator.CreateInstance(t,42,args)找不到构造函数

我在工厂模式样式函数中使用(稍微扩展版本)以下代码:

public class SingleItemNew : CheckoutContext { public BookingContext Data { get; set; } public SingleItemNew(BookingContext data) { Data = data; } } public CheckoutContext findContext(BookingContext data) { Type contextType = Type.GetType("CheckoutProcesses." + data.Case.ToString()); CheckoutContext output = Activator.CreateInstance(contextType, BindingFlags.CreateInstance, new[] { data }) as CheckoutContext; return output; }

但是,它会在运行时抛出一个未发现异常的构造函数,我无法弄清楚原因.

data.Case.ToString()方法返回一个类的名称SingleItemNew,它具有一个带有单个参数的构造函数.

有谁知道问题是什么?

干杯,艾德

.net c# types createinstance activator

2
推荐指数
1
解决办法
3774
查看次数

C#Activator.CreateInstance MissingMethod异常

我正在尝试创建具有相同基类型的对象实例,如下所示:

  Assembly myAssembly = Assembly.GetExecutingAssembly();
  var objs = myAssembly.GetTypes().Where(t => t.BaseType == typeof(SearchLogicObjectBase)).OrderBy(o => o.FullName);

  foreach (var item in objs)
  {
    SearchLogicObjectBase p = (SearchLogicObjectBase)Activator.CreateInstance(item.GetType(), new Object[] { false });        
    _searchlogic.AddDefaultSearchObject(p);
  }
Run Code Online (Sandbox Code Playgroud)

派生对象具有如下构造函数:

public SearchLogicCsri()
  : this(true)
{ }

public SearchLogicCsri(bool extendsearch)
  : base(extendsearch)
{
  Table = "csri";
  ViewModel = "CsriViewModel";
  ExtendSearch = extendsearch;
}
Run Code Online (Sandbox Code Playgroud)

并且基础对象(SearchLogicObjectBase)有一个这样的构造函数:

public SearchLogicObjectBase(bool extendsearch)
{
  _extendsearch = extendsearch;
}
Run Code Online (Sandbox Code Playgroud)

但是,上面的代码导致以下异常:

找不到类型为"System.RuntimeType"的构造函数.

基类和派生类型都有一个构造函数,它只需要一个布尔值,所以我不知道为什么我会得到错误.

有人可以帮忙吗?

c# activator

2
推荐指数
1
解决办法
1329
查看次数

C#Activator.CreateInstance()删除"无法创建抽象类"异常

我试图动态加载.DLL文件并运行其中一个方法(实际上只有一个方法..)但Activator.CreateInstance方法删除"无法创建一个抽象类"异常这是我的代码:

Assembly assembly = Assembly.Load(DLLByteArray);
//Type typeToExecute = assembly.GetType("ClassLibrary1.Class1");
//last line was replaced with the next one to ensure that the name is correct.
Type typeToExecute = assembly.GetTypes()[0];
Object instance = Activator.CreateInstance(typeToExecute);
Run Code Online (Sandbox Code Playgroud)

如果需要,减速等级:" public static unsafe class Class1".

.DLL类代码中的任何内容都可能导致此类异常吗?

c# dll activator

2
推荐指数
2
解决办法
5885
查看次数

使用Activator创建实例

假设我们有一些课程

class Class1{ }
class Class2{ }
class Class3{ }
Run Code Online (Sandbox Code Playgroud)

我有一个Type变量

Type t = /*some type unknown at compile-time*/;
Run Code Online (Sandbox Code Playgroud)

变量t是Class1或Class2或Class3.我想创建该类的实例.据我所知,我可以使用以下声明:

object instance = Activator.CreateInstance(t);
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个对象.问题是:如何将此对象转换为变量类型t.或maby有人可以建议一个解决方法.谢谢

c# reflection activator

2
推荐指数
1
解决办法
264
查看次数

从类型创建类实例

我正在尝试创建一个类的实例,我可以通用方式添加到列表中.

我知道type这需要量身定做的,我已经能够使一个类的object使用下面的代码之类的,但我还没有找到一种方法来创建一个施法,让我这个添加到列表中..任何想法?

T与objType相同

public static List<T> LoadList(string fileName, Type objType)
{
    List<T> objList = new List<T>();
    object o = Activator.CreateInstance(objType);
    objList.Add((**o.GetType()**)o);
    return objList;
}
Run Code Online (Sandbox Code Playgroud)

如果这是一个更好的方式这样做我也开放的想法:)

c# reflection activator winforms

2
推荐指数
1
解决办法
954
查看次数

Activator.CreateInstance有两个接口

我有一个我正在研究的项目,我想利用Activator.createInstance,以便我可以动态地从XML中提取类名.这些类必须根据其功能订阅两个接口中的至少一个.我的问题是,当我使用Activator.CreateInstance时,告诉我实例化的类订阅哪个接口的最佳方法是什么?我应该把演员包裹在试试中吗?看起来好像很慢.也许我应该把它转换为obj然后调用GetType并将其与我的接口名称进行比较?任何帮助表示赞赏!

c# interface activator

2
推荐指数
1
解决办法
1055
查看次数

将类添加到当前程序集中

我的应用程序中有一个当前程序集,我想从外部cs文件中添加一个类到此程序集中.有可能吗?我想像插件一样使用它.现在我正在尝试使用:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
Run Code Online (Sandbox Code Playgroud)

和Activator,但没有成功.我的应用程序是使用Roslyn,所以也许它可以做到.任何想法将不胜感激.

编辑:下一个问题是:我可以使用外部文件(带有类的cs文件)从该文件中获取实例,但类的构造函数需要从当前的程序集引用sceneManager.那么可以向Roslyn发送类似的东西并从中获取类的实例吗?

c# activator .net-assembly roslyn

2
推荐指数
1
解决办法
2072
查看次数

使用类型变量进行转换

下面的代码不起作用,我想知道如何将实例动态转换为在运行时确定的类型?

Convert.ChangeType()返回仍然需要转换的Object。调用Invoke(),GetConstructor()或Activator.CreateInstance()的所有尝试也是如此,请参见下文。在某个时候,我需要显式地强制转换代码,我希望避免它或将其尽可能地推出。

Type type = Type.GetType ("RandomChildClass");
Object obj = Activator.CreateInstance (type, new Object[]{ "argument" });
var instance = (type)obj;
Run Code Online (Sandbox Code Playgroud)

我知道我可以创建一个接受<T>的方法,但是仍然会有一个不知道如何使用动态随机类型调用它的问题,即 使用Type变量强制转换变量

c# casting activator

2
推荐指数
1
解决办法
8467
查看次数

使用泛型类型创建类的实例,并在运行时从对象的字符串名称调用相同泛型类型的方法

我有一个泛型类,它有一个泛型方法,它使用与实例化对象时传递的类型相同的类型.在运行时,我只知道我需要通过该对象名的字符串表示传入的对象的名称.我已经阅读了一些关于使用Activator和可能使用动态的东西,但我无法理解我需要如何使用它.这是我的泛型类的样子片段:

public class MyClass<T> where T : class, new()
{ 
        public IList<T> MyMethod(Stream stream)
        {
             var data = new List<T>();
             // stuff to create my list of objects
             return data;
        }
}
Run Code Online (Sandbox Code Playgroud)

我需要根据我作为字符串传入的对象的名称从MyMethod()方法返回我的IList.

我只是做一个开关/箱的字符串,然后与参考"真正的"对象的情况中实例的MyClass的,但我不知道是否有这样做的更好(更短和更清洁的)的方式.

TIA

c# generics dynamic activator

2
推荐指数
1
解决办法
5288
查看次数

如何使用Activator.CreateInstance创建一个List <T>,其中T在运行时未知?

我正在使用Activator.CreateInstance类型变量创建对象(在运行时未知):

static dynamic CreateFoo( Type t ) =>
    Activator.CreateInstance( t );
Run Code Online (Sandbox Code Playgroud)

显然,我还没有正确理解如何使用该dynamic类型,因为这仍然只是返回一个对象.

我需要能够将一个集合传递给另一个调用,Activator.CreateInstance在那里创建的类型可能是List<T>:

var values = Enumerable.Range( 1, 50 ).Select(
    I => CreateFoo( typeof( Foo ) ) ).ToArray( );
//This will explode.
var foobar = Activator.CreateInstance(
    typeof( List<Foo> ), values );
Run Code Online (Sandbox Code Playgroud)

调用上面的内容时,它会爆炸,但会出现以下异常:

在此输入图像描述

我明白为什么它这样做 - 当列表使用类型参数定义时,没有列表的构造函数期望可枚举的对象.

问题是我无法转换对象,因为我不知道运行时的类型.Activator.CreateInstance只是似乎返回一个对象,这对List<Foo>我来说很好,因为我将使用依赖对象和属性设置它们,所以盒装对象对他们来说完全没问题,但在尝试创建列表时会破坏一切(可能还有什么否则与构造函数期望类型参数).

我想在这里做什么的正确方法是什么?

符合最小,完整和可验证的示例要求:

using System;
using System.Collections.Generic;
using System.Linq;

namespace MCVEConsole {
    class Program {
        static int Main( string[ ] args …
Run Code Online (Sandbox Code Playgroud)

c# reflection activator

2
推荐指数
2
解决办法
678
查看次数