我有一个名为“Communication”的对象,它有一个“CreatePdfFromTemplate”的方法。此方法将从 Windows 服务中调用,该服务在表上具有 SqlDependancy,该表将在网站上的方法添加新行时发出通知。
在我的方法中,我传递了一个具有“Id”和“Name”的自定义对象列表。该名称是我需要使用反射加载的对象的名称。例如,“指令”。“Id”是需要从数据库加载的“Name”中引用的对象的Id。此对象在我的“通信”DLL 的运行时中未引用或不可用。
我目前正处于第一个障碍。作为第一步,我正在尝试执行以下操作:
// Load object information using Reflection
Type objectType = Assembly.GetExecutingAssembly().GetType(queueObject.Name);
int objectId = queueObject.Id;
我从搜索答案中发现了一些信息,这些信息说有一种方法可以通过在应用程序缓存或 GAC 中提供 DLL 来加载它,但我不确定这是否是最好的方法。
我以前从未使用过反射,所以如果您对此有任何建议,或者对我选择的一般结构方式有任何建议(即网站向 DB 表添加行,Windows 服务中的 SqlDependancy 触发,对通信服务 DLL 的调用创建 PDF)。
只是为了给您更多信息,我之所以选择这样做,是因为我的模板包含诸如 {Instruction.CreatedDate} 之类的标签,其中“Instruction”是对象的名称,“CreatedDate”是对象的名称一个属性,其值将替换标签。
非常感谢有关如何在我的反射中或仅在我的结构上加载此“指令”对象的任何帮助。如果我没有提供足够的信息或者我所说的不够清楚,请告诉我(这是我的第一个 StackOverflow 问题,尽管我是一个很长时间的潜伏者)。
谢谢。
- 更新 -
好的,使用 Maarten 提出的想法,我已经设法加载我的程序集并从中获取一个类型,但我的做法略有不同。我无法使用 Assembly.LoadFile 方法输入特定路径,所以我这样做了:
Assembly executingAssembly = Assembly.GetExecutingAssembly();
Assembly objectAssembly = Assembly.Load(executingAssembly
.GetReferencedAssemblies()
.Where(a => a.Name == "Common")
.FirstOrDefault());
这是有效的,因为我试图获取的类型是我的通信服务中一个名为“Common”的引用程序集的一部分(这是一个使用 nuget 帮助保持最新的已安装包,因为它经常更改)。
任何关于我如何做到这一点以及它是正确还是错误方式的进一步帖子将不胜感激!