2014-01-31 79 views
0

是否有任何方法向構造函數注入參數,該參數當前是否在基礎控制器上的Initialize方法中創建?注入(初始化)參數給構造函數 - Autofac

示例代碼:

public class SSBaseController : Controller 
    { 
     protected UserProfileClass UserProfile; 

     protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
     { 
      base.Initialize(requestContext); 
      UserProfile = UserProfileGetter.getProfileFromDB(); 
     } 

    } 

    public class SSController:SSBaseController 
    { 
     private IProcessService processService; 
     public SSController(IProcessService _processService) 
     { 
      processService = _processService; 
     } 
    } 

    public interface IProcessService 
    { 
     void doStuff(); 
    } 

    public class ProcessService1 : IProcessService 
    { 
     private UserProfileClass upc; 
     private string _name; 
     public ProcessService1(UserProfileClass _profileClass) 
     { 
      upc = _profileClass; 
     } 

     public void doStuff() 
     { 
      _name = upc.name; 
      upc.name = "xxx"; 
     } 
    } 

    public class UserProfileGetter 
    { 
     public static UserProfileClass getProfileFromDB() 
     { 
      return null; 
     } 
    } 

    public class UserProfileClass 

    { 
     public string name; 
    } 

我也想擺脫初始化的,這可能嗎? 如何使用該參數註冊ProcessService而不在SSController中爲空?

回答

0

可以整合ASP.NET MVC和Autofaq。你唯一需要做的兩件事就是註冊接口實現並指定Controller的構造函數參數。框架將完成其餘的工作。 見https://code.google.com/p/autofac/wiki/MvcIntegration 這是一個更加文章:http://blogs.msdn.com/b/roncain/archive/2012/07/16/dependency-injection-with-asp-net-web-api-and-autofac.aspx

+0

是的,我能做到這一點的寄存器和東西很容易,只是當它需要從參數初始化的控制器,變得不易理解。我讀了一些地方使用onactivating? –

+0

我不理解你的評論。看起來你可能會傳遞類似IUserProfileGetter的東西給控制器的構造函數,並使用一個UserProfile屬性,如果它不爲null,它將返回_userProfile,或者在第一次調用時通過IUserProfileGetter的幫助創建它。 –