2011-10-06 95 views
5

我想在C#应用程序中获取有关Assembly的信息。我使用以下内容:获得程序集上的信息

Assembly.GetCallingAssembly(); 

这可以完美地返回调用程序集的信息。

我想与其他应用程序共享此功能,所以我将它包含在我的类库中的一个类中。

我在多个应用程序中引用此类库。当我从我的应用程序调用此方法时,它将返回有关类库而不是应用程序的信息。有没有一种方法可以改变我的上面的代码来返回Web应用程序程序集上的信息,同时仍然将代码包含在类库中?

+0

你可能会问一个问题太低。你想达到什么目的? –

回答

3

而不是让类库变得聪明,为什么你没有调用者通过一个Assembly作为该方法的参数?所以当你从某个应用程序中调用方法时,你会通过Assembly.GetExecutingAssembly(),类库中的方法现在可以获取实际调用者的程序集。

0

我不确定你在反射之上提供了什么,但也许你正在抽象一个不需要抽象的工具。思考已经处理了这个,所以为什么不让它做它的工作?

但是,如果这个API给你一些有用的信息(比如插入到你的数据库等),那么你的方法可能是有道理的。但我仍然建议您重构它:

  • 将此代码放在一个共享的项目/程序集中,并且只需在需要调用该功能时链接该项目/程序集即可。需要duplicate code才能完成您的工作被认为是code smell
  • Assembly对象作为参数,而不是试图确定当前的组件。这样可以提供更大的灵活性,以便在您想出一些代码时想要获得一堆程序集中的数据,并且仍然允许您传递当前程序集。 (注意:达林已经提出了这一点)