0

フレームワーク4.5を使用して.NETWEBApi RESTサービスを開発していますが、アーキテクチャの方向性は、APIの機能領域を分離することです。つまり、コントローラーを別々のアセンブリに配置します。たとえば、company.web.administration、company.web.claimsなどのアセンブリにコントローラーを配置します。

実験した後、MVCフレームワークのパワーに気づきました。コントローラを別々のクラスライブラリに配置できますが、これらのライブラリがbinフォルダにある限り、参照する必要はありません。MVCはそれらをアセンブリで検出し、API呼び出しは正常に機能します。

しかし、このアーキテクチャでは、これらのコントローラライブラリを多数取得する可能性があるという問題が発生します。したがって、たとえば、bin\controllersの下にそれらを一緒にパックすると便利です。コントローラーをサブフォルダーにドロップすると、ASP.NET MVCWEBAPIフレームワークがコントローラーを見つけることができなくなります。

私はFrameworkにこれらのコントローラーを自分のディレクトリとbinで探すように指示する方法を探しています。私が使用したオプションの1つは、Web.configファイルを次のように変更したことです。

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <probing privatePath="bin;bin\controllers;controllers"/>
    </assemblyBinding>
</runtime>

それはうまくいきませんでした。何か案は?

4

1 に答える 1

1

少し前に、その方法についてブログ投稿を書きました-http ://www.strathweb.com/2012/06/using-controllers-from-an-external-assembly-in-asp-net-web- api /

基本的に、独自のメソッドをロールアウトするか、のメソッドをIAssembliesResolverオーバーライドする必要があります。GetAssemblies()DefaultAssembliesResolver

public class CustomAssemblyResolver : IAssembliesResolver
{
  public ICollection<Assembly> GetAssemblies()
  {
    List<Assembly> baseAssemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
    var controllersAssembly = Assembly.LoadFrom(@"C:\PATH_TO_MY_CONTROLLERS_ASSEMBLY");
    baseAssemblies.Add(controllersAssembly);
    return baseAssemblies;
   }
}
于 2012-11-08T01:36:01.763 に答える