コントローラーがサービスを使用して特定のタスクを実行する MVC3 Web アプリケーションがあります。たとえば、次のように、各アクションで必要なサービスを個別にインスタンス化するために使用します。
public ActionResult Index()
{
ICustomService customService = new CustomService();
var list = customService.ReturnSomething();
.....
return View(list)
}
これはうまくいきました。次に、より良い設計原則に従うために、依存性注入に MEF を使用することにしました。だから今、私はこのようなことをしています:
public class MyController : Controller
{
[Import]
private ICustomService _customService;
public MyController()
{
MEFManager.Compose(this);
}
public ActionResult Index()
{
var list = _customService.ReturnSomething();
return View(list);
}
構成は、次の関数である MEFManage.Compose(this) によって行われます。
public static void Compose(object o)
{
var container = new CompositionContainer(
new DirectoryCatalog(Path.Combine(
AppDomain.CurrentDomain.BaseDirectory, "bin"))
);
var batch = new CompositionBatch();
batch.AddPart(o);
container.Compose(batch);
}
これは実際に動作しますが、MEF を使用していないときよりも 6 倍から 7 倍遅くなります。なぜこんなに遅いのか誰か知っていますか?私は何か間違ったことをしていますか?