2014-01-31 78 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的帮助创建它。 –