2011-03-13 52 views
0

我處於一個有趣的情況;我需要將IContainer傳遞給我定義的IControllerActivator組件,但IControllerActivator需要在容器中註冊。這是因爲IControllerActivator將使用容器來構建控制器。AutoFac和MVC IControllerActivator需要集裝箱

我將容器作爲靜態引用存儲在global.asax文件中;這樣,容器上的任何依賴對象(如我的激活器)都可以引用它。由於激活器使用容器,並且需要在autofac模塊中註冊,是否有方法可以定義此特定映射需要對容器的引用,還是可以在構建容器後註冊?

我在這裏有什麼選擇?

謝謝。

回答

3

您可以採取IComponentContext依賴:

public Foo(IComponentContext context, ...) 

Autofac容器自動註冊自己這個類型下,使其可用於所有組件。上下文實例將是Foo已解析的容器,無論它是應用程序級還是請求級容器。這可以減少您需要了解您所引用容器的範圍。

或者,您可以查看是否有任何Autofac relationship types滿足您的需求。使用這些類型時,您很少需要直接參考IComponentContext。這可以讓您的課程免於Autofac的直接知識。