2

我使用 IKVM 将 Oracle 的 OIMClient 库转换为 dll。不想用 java,想用 .NET,但是 .NET 的 OIM 没有 API。

如果有人使用过 OIM,您所做的就是创建 OIMClient 对象,然后创建一个 UserManger 对象,用于查找、修改、创建用户。

这是java代码(经过测试并且有效):

UserManager umgr = null;
umgr = oimClient.getService(UserManager.class);

如果不知道,这是 getService 方法:

public virtual object getService(Java.Lang.Class serviceClass);

在.net 中,我找不到使用interface.class 的方法。- C# 中的 UserManager 对象不存在 .class。- 如果我尝试将其转换为我得到的 java 类,“无法从 'oracle.iam.identity.usermgmt.api.UserManager' 转换为 'java.lang.Class'”

另一个注意事项:我想知道 IKVM 是否没有正确转换某些东西,或者我可能只是迷路了 :)

所以,我的问题是:如何在 C# 中执行 java 命令Interface .class?

4

1 回答 1

1

正如 HighCore 在他的评论中所建议的那样,'typeof(UserManager)' 就是你想要的。如在

umgr = (UserManager)oimClient.getService(typeof(UserManager));

任何需要 Java 类的方法都可以提供一个 .NET 类型。您可以通过查看 java.lang.Class 的元数据并注意到它提供了对 SystemType 的隐式转换来看到这一点。

[Serializable]
[Signature("T:Ljava/lang/Object;>Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/reflect/GenericDeclaration;Ljava/lang/reflect/Type;Ljava/lang/reflect/AnnotatedElement;")]
public sealed class Class : Object, Serializable.__Interface, GenericDeclaration, Type, AnnotatedElement, ISerializable
{
    // <SNIP>
    public static implicit operator Class(global::System.Type type);
}
于 2014-01-14T22:51:37.480 回答