标记装配

时间:2013-01-23 10:12:09

标签: .net reflection .net-assembly

我正在努力创建一个多设备的mvc网站,其中可以为每个租户覆盖视图。

我正在使用RazorGenerator以便能够从已编译的程序集加载视图(进行一些修改以允许多个程序集)。

所以现在我需要一种方法来识别包含视图的bin中的Dll。目前我只是创建一个虚拟类(Class1)并循环遍历AppDomain.CurrentDomain.GetAssemblies().ToList()以查看哪些asssemblies包含该虚拟类

我可以想象一些可能性。

  1. 创建一个界面IViewPlugin并将其分配给每个视图插件程序集中的Class1
  2. 为每个程序集命名MyCompany.Presentation.Views.Plugins.[ClientName]并包含所有匹配的插件。
  3. 当程序集本身没有任何实际的类时,还有其他更好的方法将程序集标记为'插件'程序集(除非我专门为了识别插件程序集而创建一个)

1 个答案:

答案 0 :(得分:1)

您可以创建自定义属性:

[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = true)]
public class PluginAssemblyAttribute : Attribute
{
}

并将其应用于集会:

[assembly: PluginAssembly]

然后,您可以检查程序集是否具有以下属性:

if (assembly.IsDefined(typeof(PluginAssemblyAttribute), false)
    ...