问题标签 [activator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
47618 浏览

c# - Activator.CreateInstance 找不到构造函数(MissingMethodException)

我有一个具有以下构造函数的类

以及一个没有参数的默认构造函数。

接下来我正在尝试创建一个实例,但它只能在没有参数的情况下工作:

这工作得很好,但如果我想传递参数,它不会:

这导致MissingMethodException

未找到构造函数类型 Vialis.LightLink.Controller.Scenarios.Composites.DelayCompositeDesigner

这里有什么想法吗?


问题是我真的需要在构造过程中传递一个对象。

你看我有一个设计器,它加载所有从CompositeBase. 然后将它们添加到列表中,用户可以从中将它们拖到设计器中。这样做后,将拖动的实例添加到设计器中。这些类中的每一个都定义了自定义属性:

当用户在设计器中选择一个项目时,它会查看这些属性以加载该类型的设计器。例如,在这种情况下,DelayComposite它会加载一个用户控件,该控件具有一个标签和一个滑块,允许用户设置DelayComposite实例的“延迟”属性。

到目前为止,如果我不将任何参数传递给构造函数,这可以正常工作。设计器创建 的实例DelayCompositeDesigner并将其分配给 WPF 的 content 属性ContentPresenter

但是由于那个设计器需要修改设计器中选择的属性,所以DelayComposite 我必须将这个实例传递给它。这就是为什么构造函数看起来是这样的:

欢迎提出建议


@VolkerK

您的代码的结果是这样的:

<---- foo Vialis.LightLink.Controller.Scenarios.Composites.DelayCompositeDesignerVoid .ctor() Vialis.LightLink.Controller.Scenarios.Composites.DelayCompositeDesignerVoid .ctor(Vialis.LightLink.Controller.Scenarios.Composites.DelayComposite) 参数:Vialis .LightLink.Controller.Scenarios.Composites.DelayComposite foo ---->


Leppie,你是对的,我出于某种原因在我的 UI 应用程序中引用了 Composites 程序集……这不是我应该做的,因为我在运行时加载它。以下代码有效:

如您所见,代码不了解DelayComposite类型。

这解决了当前的问题,但是为我想要实现的目标引入了许多新的问题,无论哪种方式都谢谢你,也感谢所有在这里回答的人。


至于以下代码,多人建议:

Activator.CreateInstance签名如下所示:

所以它应该接受我的代码,但我会尝试建议的代码

更新:

我已经按照建议尝试了这个:

结果是一样的。

0 投票
5 回答
9691 浏览

c# - 激活器和静态类

我正在折腾使用 Activator 类来访问程序集中的资源的想法,否则我会为(依赖注入)创建循环引用。我以前使用需要引用的 vanilla 类来完成它,但我的问题是:我可以使用 Activator 来访问静态类吗?

让我失望的部分是激活器返回给你一个对象的实例,而静态类没有实例。这可能吗?

0 投票
1 回答
1765 浏览

reflection - C# CF2.0 - System.Activator 和内部类

我有一个包含实体集合的数据提供者。我只希望能够通过数据提供者创建一个新实体。

即,要创建我需要使用的新记录:

我的问题是,如果我将实体设置为内部,System.Activator 无法创建它们的实例。我的每个数据提供者都使用一个基类,该类具有传递的实体的通用类型。

所以目前我的 AddNew() 方法包含以下内容:

如果我可以在数据提供者命名空间之外手动实例化一个新实体,这显然不是世界末日,但考虑到无法保存它们似乎毫无意义,那么为什么要选择这样做呢?

编辑:忘了提到我所有的提供者、实体等都在同一个命名空间中。

0 投票
3 回答
5528 浏览

asp.net - Activator.CreateInstance 为参数“类型”抛出 ArgumentNullException

我最近遇到了我的个人资料提供程序的问题:它无法正确检索个人资料(请参阅下面的错误)。它在本地工作,但是当我将 Web 部署项目编译的代码放在服务器上时,它会崩溃。

值不能为空。参数名称:type 说明:当前web请求执行过程中发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

Strack Trace:
[ArgumentNullException:值不能为空。参数名称:type] System.Activator.CreateInstance(Type type, Boolean nonPublic) +2796915 System.Web.Profile.ProfileBase.CreateMyInstance(String username, Boolean isAuthenticated) +76 System.Web.Profile.ProfileBase.Create(String username,布尔值已验证)+312

由 imgur.com 主办


我找到了解决方案,但远非显而易见(请参阅下面的答案)。

0 投票
3 回答
4384 浏览

c# - C# 在运行时使用泛型创建对象

在以下示例中,我可以通过字符串动态创建对象;但是,我无法获得 BASE 类的公共方法。我不能将 obj 转换为 BASE,因为我不知道在设计时将使用什么泛型。在运行时这样做的任何建议都会很好。

项目 A 包含类 A{T,J> : BASE{T,J>
项目 B 包含类 B{T,J> : BASE{T,J>

项目 C 包含 Class BASE{T,J>
public virtual control{T,J> item

项目 Windows 窗体
cmdGo_Click 事件

string dll = textbox1.text //ex "ProjectA.dll"
string class = textbox2.text //ex "A`2[enuT,enuJ]"
object obj = activator.createinstancefrom(dll,class)

0 投票
2 回答
1254 浏览

c# - 动态定义类型化数据集?

我正在尝试在运行时在我的代码中动态创建类型化数据集的实例。我有可用的类型,但是当我尝试这样做时:

问题是当我尝试运行它时,根据代码,该类型似乎无效。我在这里做错了什么?

0 投票
4 回答
3843 浏览

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

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

p>

但是,它在运行时会抛出一个未找到构造函数的异常,我不知道为什么。

data.Case.ToString() 方法返回一个类的名称 SingleItemNew,该类的构造函数采用单个参数。

有谁知道问题是什么?

干杯,埃德

0 投票
5 回答
180065 浏览

c# - 如何使用反射动态创建通用 C# 对象?

在 C# 中,我有以下对象:

我想使用 C# 反射(Activator.CreateInstance)动态创建 TaskA 或 TaskB 。但是我事先不知道类型,所以我需要根据“namespace.TaskA”或“namespace.TaskAB”等字符串动态创建TaskA。

0 投票
2 回答
621 浏览

c# - 使用 Activator 创建具有多个构造函数的类实例的最佳方法?

我已经实现了一个“插件”系统,我的应用程序在其中创建了在运行时实现接口以允许可插入功能的类。

我通过在插件程序集中实现指定接口的所有类上使用 Activator.CreateInstance 来实现这一点。

目前我只使用该类的一个实现,为此我有两个构造函数参数,并将它们包含在 Activator.CreateInstance 调用中:

我意识到如果添加了不使用此构造函数签名的实现,这可能会在以后引起问题。处理这个问题的最佳情况是什么。

通过文档明确说构造函数需要使用此签名,然后将其包围在 try/catch 中?

或者有没有办法调用一个类的任何构造函数?请记住,我必须以某种方式匹配构造函数参数。

或者...通过将参数作为静态属性放在静态类中来避免构造函数参数?

0 投票
4 回答
1157 浏览

c# - C# foreach 循环导致 CS 0246 找不到类型或命名空间

我有一个 foreach 循环,它循环遍历类型列表并为每个类型创建一个实例。但是,当我构建时,它给出了 CS0246 错误(“找不到类型或命名空间......”)。这是代码的简化版本:

编辑:后续问题

我的 foreach 循环现在看起来像这样:

Types List 现在是 Object 类型

这编译得很好,但是当我运行它时,我得到以下信息:

如果我将它分成两行,首先创建一个对象,然后将其添加到列表中,第一行很好(对象创建成功),但它给了我相同的错误消息。

编辑:更新代码示例