2014-04-22 37 views
2

我有一個內部類是內部可見的服務工廠。它也繼承了一個公共接口。國際奧委會使用AutoFac的內部類

當我想在我的應用程序中使用它的功能時,我聲明瞭接口的對象並通過服務工廠爲特定的類實例化它。

現在我們正在使用MVC,我想在我的控制器之一中爲這個類創建IOC。 。 這個類是內部的,我不能在global.ascx

例如,當我寫 builder.RegisterType()爲()寄存器InstancePerHttpRequest此();
的CommonSvc是內部的,它拋出編譯時錯誤作爲Services.CommonSvc」不可訪問由於其保護級別

請告知

+0

爲什麼你不公開課程? – Steven

+0

一種方法是不應公開類,因此人們在使用界面時不會使用它們。這種方法就像Ninject,每個項目都必須引用Ninject,但每個項目都控制自己的綁定。 – David

回答

3

您的選擇:

  1. CommonSvc公共
  2. 使用InternalsVisibleToAttribute註釋您的程序集以使內部類型對於調用程序集可見。
  3. 不是直接登錄CommonSvc,而是使用RegisterAssemblyTypes()按照慣例註冊。例如:
builder.RegisterAssemblyTypes(typeof(SomeOtherTypeInTheSameAssembly).Assembly) 
      .Where(t => typeof(SomeInterface).IsAssignableFrom(t)) 
      .AsImplementedInterfaces();