c# - 如何动态构建ctor
问题描述
我试图在运行时生成一个类,但我正在努力创建 ctor。
我有一个看起来像这样的基类:
public abstract class MyServiceBase : SomeOtherBaseClass
{
private readonly ILogger _logger;
private readonly IOptions<MyReaderOptions> _options;
private readonly Extractor _extractor;
private readonly IResolveSourceSystem _sourceSystemResolver;
private readonly IAcceptLogs _logBuffer;
protected MyServiceBase(ILogger logger,
IOptions<MyReaderOptions> options,
Extractor extractor,
IResolveSourceSystem sourceSystemResolver,
IAcceptLogs logBuffer)
{
_logger = logger;
_options = options;
_extractor = extractor;
_sourceSystemResolver = sourceSystemResolver;
_logBuffer = logBuffer;
}
// and then some public methods (not abstract - just normal implemented methods)
}
我想在运行时生成一个如下所示的类:
public class MyGeneratedReader : MyServiceBase
{
public MyGeneratedReader(ILogger<MyGeneratedReader> logger,
IOptions<MyReaderOptions> options,
Extractor extractor,
IResolveSourceSystem sourceSystemResolver,
IAcceptLogs logBuffer)
: base(logger, options, extractor, sourceSystemResolver, logBuffer)
{
}
}
到目前为止,我可以生成类 - 但我正在努力添加 ctor。
我可以获得基类的 ctorInfo(见下文) - 但我不确定如何将其添加到新类型以及如何告诉它这应该调用基类。
var newTypeName = "SomeReader";
var assemblyName = new AssemblyName("DynamicReaders");
var dynamicAssembly = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
var dynamicModule = dynamicAssembly.DefineDynamicModule("Main");
var dynamicType = dynamicModule.DefineType(
newTypeName,
TypeAttributes.Public
| TypeAttributes.Class
| TypeAttributes.AutoClass
| TypeAttributes.AnsiClass
| TypeAttributes.BeforeFieldInit
| TypeAttributes.AutoLayout,
typeof(MyServiceBase));
);
var basector = typeof(MyServiceBase).GetConstructor(
BindingFlags.NonPublic | BindingFlags.Instance,
null,
new[] { typeof(ILogger),
typeof(IOptions<ReaderOptions>),
typeof(JsonExtractor),
typeof(IDetermineSourceSystem),
typeof(ICanAcceptLogs)
},
null);
// At this point basector contains the info for the base classes ctor.
// Now what ???
var type = dynamicType.CreateType();
知道如何将 ctor 添加到生成的类中,以便它知道调用基类 ctor 吗?
解决方案
推荐阅读
- python - 在python中递归地为列表的左侧分配标签“left”和标签“right”
- python - 绘制前 10 个比例,但出现错误
- jquery - 使用 $.ajax 的 CORS 策略阻止 XMLHttpRequest
- python-3.x - 试图找到一种有效的方法来在熊猫中使用引用前一行的while循环
- javascript - 根据输入值增量更改按钮颜色
- laravel - 您可以从 Auth Logout 事件中获取用户 ID 吗?
- ios - iOS 13 分段控制:删除滑动手势以选择分段
- sqlite - 如何使用 jOOQ 通过 SQLite 正确生成日期和时间类型
- .net - ExecuteScalar.Connection 属性尚未初始化
- c++ - 如何确定是否有多少元素<数组中的最后一个元素