0

テナントごとにビューをオーバーライドできるマルチテナントMVCWebサイトを作成しようとしています。

コンパイルされたアセンブリからビューをロードできるようにするためにRazorGeneratorを使用しています(複数のアセンブリを許可するためにいくつかの変更が加えられています)。

したがって、ビューを含むビン内のDLLを識別する方法が必要です。現在、ダミークラス(Class1)を作成し、ループしてAppDomain.CurrentDomain.GetAssemblies().ToList()、どのアセンブリにそのダミークラスが含まれているかを確認しています。

私はいくつかの可能性を想像することができます。

  1. インターフェイスを作成し、各ビュープラグインアセンブリでIViewPlugin自分に割り当てますClass1
  2. 各アセンブリMyCompany.Presentation.Views.Plugins.[ClientName]に名前を付け、一致するすべてのプラグインを含めます。

アセンブリ自体に実際のクラスがない場合に、アセンブリを「プラグイン」アセンブリとしてマークする他のより良い方法はありますか(プラグインアセンブリを識別するために特別に作成した場合を除く)

4

1 に答える 1

1

カスタム属性を作成できます。

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

そしてそれをアセンブリに適用します:

[assembly: PluginAssembly]

次に、アセンブリに次の属性があるかどうかを確認できます。

if (assembly.IsDefined(typeof(PluginAssemblyAttribute), false)
    ...
于 2013-01-23T10:20:21.033 に答える