我正在使用反射动态创建一个实例。
var typesTR = Assembly.GetAssembly(typeof(BGenericConfigurationClass<>)).GetTypes()
.Where(type =>
!string.IsNullOrEmpty(type.Namespace) &&
(type.Namespace == "EntitiesConfiguration"))
.Where(type => type.BaseType != null
&& type.BaseType.IsGenericType
&&
(type.BaseType.GetGenericTypeDefinition() == typeof(BGenericConfigurationClass<>) ||
type.BaseType.GetGenericTypeDefinition() == typeof(CGenericConfigurationClass<>) ));
foreach (var type in typesTR)
{
dynamic configurationInstance = Activator.CreateInstance(type);
modelBuilder.Configurations.Add(configurationInstance);
}
我的例外如下: - “无法创建CGenericConfigurationClass`1 [T]的实例,因为Type.ContainsGenericParameters为真。”
答案 0 :(得分:4)
看起来cmake_minimum_required(VERSION 3.8)
project(MyLibConsumer VERSION 1.0.0 LANGUAGES CXX)
set(LIB_INSTALL_DIR ${CMAKE_BINARY_DIR}/thirdparty/mylib)
include(ExternalProject)
ExternalProject_Add(MyLibExternal
PREFIX "${CMAKE_BINARY_DIR}/external/mylib"
GIT_REPOSITORY "https://github.com/arteniioleg/stackoverflow-question-46772541.git"
GIT_TAG "mylib"
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIB_INSTALL_DIR}
)
if(NOT EXISTS ${LIB_INSTALL_DIR}/lib)
# Happens on first CMake run.
# Can't continue because the below `find_package(REQUIRED)` will fail.
# Build all external project targets then rerun CMake and build the project target.
message(AUTHOR_WARNING "Build all external projects then reload cmake.")
return()
endif()
add_executable(${PROJECT_NAME} main.cpp)
set_target_properties(${PROJECT_NAME} PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS NO
)
add_dependencies(${PROJECT_NAME} MyLibExternal)
find_package(MyLib REQUIRED HINTS ${LIB_INSTALL_DIR})
target_link_libraries(${PROJECT_NAME} PRIVATE MyLib)
中的一个类型是泛型类型,并且您尝试创建该类型的实例而不指定泛型类型参数。例如,这就好像您尝试创建typesTR
的实例但没有在尖括号&lt;&gt;之间提供类型。这是不可能的,List<>
必须被赋予“封闭的通用类型”。
为此,您可以执行以下操作,但根据您的示例,我认为这不会非常有用,因为您需要创建大量配置实例,并且您可能不知道要传递的通用类型
Activator.CreateInstance()
我的猜测是var t = type.MakeGenericType(typeof(SomeClassToBeUsedAsGenericTypeParameter));
dynamic configurationInstance = Activator.CreateInstance(t);
...
中的类型比你预期的要多,并且包含一个通用的基类。我认为它应该只包括DClass和EClass,但它包括一个基类。
答案 1 :(得分:0)
就我而言,这当然是不同的,但是与问题中提出的问题也有一些相似之处,我设法通过使用以下代码使我的EF泛型中的实体映射成为一部分
render(){
return(
<div>
...
</div>)
}