如何从库中初始化一个类?

发布于 2024-09-06 04:19:38 字数 619 浏览 3 评论 0原文

我在类库中有一些类(单独的程序集)。我将其引用到我的项目中,并且我想从该库中初始化一个特定的类。我只知道它的名字。所有类都实现一个接口。 问题来了。

到目前为止我的代码:

using MyLibrary;
...
IMyInterface dll = Activator.CreateInstance("MyLibrary", "MyLibrary.NameOfClass") as IMyInterface;

但是 dll 始终为空。 有什么想法吗?

谢谢

更新

我删除了对库的引用并将该代码重写为:

Assembly a = Assembly.Load("MyLibrary");
Type type = a.GetType("MyLibrary.SKClass");
IMyInterface obj = Activator.CreateInstance(type) as IMyInterface;

但 obj 为空。

如果我使用 a.GetExportedTypes() 检查库类型,就会发现 SKClass 就在那里。那么为什么这段代码仍然返回 null 呢?

I have a few classes in the class library (separate assembly). I referenced it to my project and I want to initialize one specific class from that library. I know only its name. All of the classes implements one interface.
And here comes the problem.

My code so far:

using MyLibrary;
...
IMyInterface dll = Activator.CreateInstance("MyLibrary", "MyLibrary.NameOfClass") as IMyInterface;

But dll is always null.
Any ideas?

Thanks

UPDATE

I remove reference to the library and rewrite that code to:

Assembly a = Assembly.Load("MyLibrary");
Type type = a.GetType("MyLibrary.SKClass");
IMyInterface obj = Activator.CreateInstance(type) as IMyInterface;

but obj is null.

If I checked library types with a.GetExportedTypes(), SKClass is there. So why is this code still returning null?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清眉祭 2024-09-13 04:19:38
var assembly = Assembly.LoadFile(@"full\path\to.dll");

var type = assembly.GetType("Full.Namespace.Type");

var object = Activator.CreateInstance(type);
var assembly = Assembly.LoadFile(@"full\path\to.dll");

var type = assembly.GetType("Full.Namespace.Type");

var object = Activator.CreateInstance(type);
呆头 2024-09-13 04:19:38

你为什么不使用这个...?

程序集 a = Assembly.Load("ClassLibrary1");
Interface1 i = a.CreateInstance("ClassLibrary1.ClassName") as Interface1;

有必要使用Activator吗...?

Why aren't you using this...?

Assembly a = Assembly.Load("ClassLibrary1");
Interface1 i = a.CreateInstance("ClassLibrary1.ClassName") as Interface1;

Is it necessary that you have to use Activator...?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文