public void TestGenerics() { var testTypes = new[] { typeof (TestGenericBinarizable<int>), typeof (TestGenericBinarizable<string>), typeof (TestGenericBinarizable<TestGenericBinarizable<int>>), typeof (TestGenericBinarizable<List<Tuple<int, string>>>), typeof (TestGenericBinarizable<List<TestGenericBinarizable<List<Tuple<int, string>>>>>), typeof (List<TestGenericBinarizable<List<TestGenericBinarizable<List<Tuple<int, string>>>>>>), typeof (TestGenericBinarizable<int, string>), typeof (TestGenericBinarizable<int, TestGenericBinarizable<string>>), typeof (TestGenericBinarizable<int, string, Type>), typeof (TestGenericBinarizable<int, string, TestGenericBinarizable<int, string, Type>>) }; foreach (var type in testTypes) { // Without assembly var resolvedType = new TypeResolver().ResolveType(type.FullName); Assert.AreEqual(type.FullName, resolvedType.FullName); // With assembly resolvedType = new TypeResolver().ResolveType(type.FullName, type.Assembly.FullName); Assert.AreEqual(type.FullName, resolvedType.FullName); // Assembly-qualified resolvedType = new TypeResolver().ResolveType(type.AssemblyQualifiedName); Assert.AreEqual(type.FullName, resolvedType.FullName); } }
public void TestReferencedAssemblyLoading() { const string dllName = "Apache.Ignite.Core.Tests.TestDll"; const string typeName = "Apache.Ignite.Core.Tests.TestDll.TestClass"; // Check that the dll is not yet loaded Assert.IsFalse(AppDomain.CurrentDomain.GetAssemblies().Any(x => x.FullName.StartsWith(dllName))); // Check that the dll is referenced by current assembly Assert.IsTrue(Assembly.GetExecutingAssembly().GetReferencedAssemblies() .Any(x => x.FullName.StartsWith(dllName))); // Check resolver var type = new TypeResolver().ResolveType(typeName); Assert.IsNotNull(type); Assert.AreEqual(typeName, type.FullName); Assert.IsNotNull(Activator.CreateInstance(type)); // At this moment the dll should be loaded Assert.IsTrue(AppDomain.CurrentDomain.GetAssemblies().Any(x => x.FullName.StartsWith(dllName))); }
/// <summary> /// Add user type. /// </summary> /// <param name="typeCfg">Type configuration.</param> /// <param name="typeResolver">The type resolver.</param> /// <exception cref="BinaryObjectException"></exception> private BinaryFullTypeDescriptor AddUserType(BinaryTypeConfiguration typeCfg, TypeResolver typeResolver) { // Get converter/mapper/serializer. IBinaryNameMapper nameMapper = typeCfg.NameMapper ?? _cfg.NameMapper ?? GetDefaultNameMapper(); IBinaryIdMapper idMapper = typeCfg.IdMapper ?? _cfg.IdMapper; bool keepDeserialized = typeCfg.KeepDeserialized ?? _cfg.KeepDeserialized; // Try resolving type. Type type = typeResolver.ResolveType(typeCfg.TypeName); if (type != null) { ValidateUserType(type); if (typeCfg.IsEnum != BinaryUtils.IsIgniteEnum(type)) { throw new BinaryObjectException( string.Format( "Invalid IsEnum flag in binary type configuration. " + "Configuration value: IsEnum={0}, actual type: IsEnum={1}, type={2}", typeCfg.IsEnum, type.IsEnum, type)); } // Type is found. var typeName = GetTypeName(type, nameMapper); int typeId = GetTypeId(typeName, idMapper); var affKeyFld = typeCfg.AffinityKeyFieldName ?? AffinityKeyMappedAttribute.GetFieldNameFromAttribute(type); var serializer = GetSerializer(_cfg, typeCfg, type, typeId, nameMapper, idMapper, _log); return(AddType(type, typeId, typeName, true, keepDeserialized, nameMapper, idMapper, serializer, affKeyFld, BinaryUtils.IsIgniteEnum(type))); } else { // Type is not found. string typeName = GetTypeName(typeCfg.TypeName, nameMapper); int typeId = GetTypeId(typeName, idMapper); return(AddType(null, typeId, typeName, true, keepDeserialized, nameMapper, idMapper, null, typeCfg.AffinityKeyFieldName, typeCfg.IsEnum)); } }