2016-02-01 48 views
0

我有天藍色的工作角色,我有類型列表,我在運行時創建它。 我需要使用IoC(結構圖)來初始化構造函數參數。 現在我有這個類:如果在運行時創建實例,如何解析構造函數參數?

public class BuildCompletedFormatter1 
    { 
     private readonly IBuildService _buildService; 
     private readonly IProjectService _projectService; 

     public BuildCompletedFormatter(IContainer container) : base(container) 
     { 
      _projectService = container.GetInstance<IProjectService>(); 
      _buildService = container.GetInstance<IBuildService>(); 
     } 
} 

,我現在創建:

var type = instanse.GetType(); 
object instantiatedType = Activator.CreateInstance(type, container); 
return instantiatedType; 

但我需要用零個或多個paramas初始化構造函數。 我格式化也不需要知道IContaiiner

我想在構造函數中的PARAMS:

public class BuildCompletedFormatter2 
     { 
      private readonly IBuildService _buildService; 
      private readonly IProjectService _projectService; 

      public BuildCompletedFormatter(IProjectService projectService, IBuildService buildService) 
      { 
       _projectService = projectService; 
       _buildService = buildService; 
      } 
    } 
+0

那到底是什麼問題?顯然你已經檢查了MSDN [CreateInstance](https://msdn.microsoft.com/en-us/library/wcxyzt4d%28v=vs.110%29.aspx)(這篇文章中的示例代碼也沒有意義,因爲沒有'CreateInstance'方法將對象作爲參數)...請澄清。 –

+0

我沒有通過IContainer容器,我需要通過服務,而當我創建實例IoC automaticaly時需要傳遞參數 – Mediator

+0

您已經有'instanse'。爲什麼你需要從它的類型生成一個新的對象? –

回答

1

如果你知道你想要StructureMap解決的類型,你應該能夠很容易地爲它創造如:

var container = new Container(); 
container.Configure(r => r.For<IProjectService>().Use<MyProjectService>()); 
container.Configure(r => r.For<IBuildService>().Use<MyBuildService>()); 

var fmt = container.GetInstance<BuildCompletedFormatter2>(); 

這是一個漫長的時間,因爲我最後看了一眼StructureMap,所以我利用其API的可能是過時的,但總的概念應該保持不變。

相關問題