2012-09-12 28 views
2

我有一個自定義ViewEngine,我正在使用我的MVC4網絡應用程序。是否可以使用IOC來解析viewengine?

我註冊目前在Global.asax這樣的:

ViewEngines.Engines.Clear(); 
ViewEngines.Engines.Add(new CustomViewEngine()); 

在我CustomViewEngine類我有一個是可以通過我的國際奧委會執行類的屬性(使用CastleWindsor)

此刻,我能在CustomViewEngine中直接訪問Windsor解析器並解決它們,但我真正想要做的是由Windsor解決ViewEngine並免費獲得所有這些位。無需明確地做。

這甚至可能嗎?我希望ViewEngine可以根據WebRequest進行解析。

回答

2

這樣的事情呢?

public class DependencyViewEngine : RazorViewEngine 
    { 
     public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache) 
     { 
      var result = base.FindPartialView(controllerContext, partialViewName, useCache); 
      result.ViewEngine = // resolve view engine 
      return result; 
     } 

     public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache) 
     { 
      var result = base.FindView(controllerContext, viewName, masterName, useCache); 
      result.ViewEngine = // resolve view engine 
      return result; 
     } 

    } 

然後

ViewEngines.Engines.Clear(); 
    ViewEngines.Engines.Add(new DependencyViewEngine()); 

編輯:

如何實現依賴解析器使用你的容器?

public class CustomDependencyResolver : IDependencyResolver 
{ 
    public CustomDependencyResolver(IContainer container) 
    { 
     // ... 
    } 

    public object GetService(Type serviceType) 
    { 
     // pass resolution off to your container 
    } 
    public IEnumerable<object> GetServices(Type serviceType) 
    { 
     // pass resolution off to your container 
    } 
} 

然後

+0

等等,我仍然需要手動解決這個問題,對嗎? – shenku

+0

@shenku以另一種可能性更新了我的答案 –

0

您應該使用的IDependencyResolver衍生自dependecy解析服務。 MVC在解析IViewEngine接口時調用IDependencyResolver.GetServices方法。如果沒有這種方法返回的服務,MVC將調用傳統的API(ViewEngines.Engines)。 也有我的這個方法返回多個服務(它是競爭的多服務模型)。儘管這種情況非常罕見,但它仍然存在。 因此,只需在自定義引擎中實現IViewEngine接口,將其註冊到容器中並使用自定義IDependencyResolver實現。

相關問題