c# - 是否可以使用IOC来解析viewengine?

标签 c# asp.net-mvc inversion-of-control castle-windsor

我有一个自定义 ViewEngine,正在与我的 MVC4 Web 应用程序一起使用。

我的注册当前位于 Global.asax 中,如下所示:

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

在我的 CustomViewEngine 类中,我具有可通过 IOC 实现(使用 CaSTLeWindsor)使用的类的属性

目前,我可以直接在 CustomViewEngine 中访问 Windsor 解析器并解析它们,但我真正想做的是让 Windsor 解析 ViewEngine 并免费获得所有这些位。无需明确执行。

这可能吗?我希望 ViewEngine 然后根据 WebRequest 进行解析。

最佳答案

像这样怎么样?

    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
    }
}

然后

protected void Application_Start()
{
   ViewEngines.Engines.Clear();
   var resolver = new CustomDependencyResolver(container);
   DependencyResolver.SetResolver(resolver);
}

关于c# - 是否可以使用IOC来解析viewengine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12380898/

相关文章:

asp.net - 模型在发送到 Controller 的表单上始终为 NULL

asp.net-mvc - MVC表格网格发布表格并逐行读取

c# - app.config 分离实现

c# - StructureMap 和泛型 - 如何指定默认构造函数?

c# - ASP.NET Web API 中的自定义方法名称

c# - 访问 MarkupExtension.ProvideValue 中的构造函数参数

c# - 取消不同异步操作的通用方法

c# - 不并行运行的异步方法

c# - NInject:您在哪里保存对内核的引用?

javascript - Gridview文本框焦点位于verticle中