2015-11-19 51 views
3

我有一個包含Autofac與類庫

-MVC project 
-WCF Project 
-Service library 
-Model (Entity Framework) 

的MVC項目從Web服務讓所有的數據的C#解決方案。 而WCF服務正在從服務庫中獲取數據。

我現在試圖用Autofac來實現DI。

我到目前爲止所做的是在服務庫中創建樹類。

public class ServiceModule : Autofac.Module 
{ 
    protected override void Load(ContainerBuilder builder) 
    { 
     builder.RegisterAssemblyTypes(Assembly.Load("Foot.Service")) 
      .Where(t => t.Name.EndsWith("Service")) 
      .AsImplementedInterfaces() 
      .InstancePerLifetimeScope(); 
    } 
} 

public class EFModule : Autofac.Module 
{ 
    protected override void Load(ContainerBuilder builder) 
    { 
     builder.RegisterType(typeof(FootContext)).As(typeof(IContext)).InstancePerLifetimeScope(); 
    } 
} 

public class Init 
{ 
    public Init() 
    { 
     //Autofac Configuration 
     var builder = new Autofac.ContainerBuilder(); 
     builder.RegisterModule(new ServiceModule()); 
     builder.RegisterModule(new EFModule()); 
     var container = builder.Build(); 

    } 
} 

這是正確的路要走嗎?然後調用WCF庫中的Init()?

我應該爲WCF服務做同樣的事情嗎?

Regards

回答

1

我可以在您的解決方案中看到兩個應用程序。第一個應用程序是MVC項目。第二個應用程序是WCF服務。其他項目是類庫而不是應用程序。

你需要做的是確保只有應用程序有Composition Roots,即只有應用程序應該在其入口點組成對象。

從引用的文章引用:

只有應用應該構成根。圖書館和框架不應該。

因此,您應該參考DI容器的唯一地方是兩個提及的應用程序。所以,就你而言,這意味着你應該在WCF服務項目中註冊服務和模型庫中的類型。服務和模型庫不應該有任何對DI容器的引用。

+0

感謝您的回答。所以我展示的代碼應該在WCF服務中?在MVC項目中,用於WCF服務的DI? – determig

+0

是的,因爲這種情況下的WCF服務就是應用程序。 –

+0

我應該什麼時候從WCF調用init()?每次打電話?或者,如果我創建它作爲一個Windows服務,然後開始的Web服務? – determig