代码之家  ›  专栏  ›  技术社区  ›  mnemosyn

mvc2/MVCContrib中的包含处理

  •  2
  • mnemosyn  · 技术社区  · 15 年前

    我想通过组合和缩小javascript和 CSS 文件夹。自 MVCContrib IncludeHandling ,我看了一下,不幸的是,这给我留下了一些没有答案的问题:

    Ninject.Mvc ,但似乎 MvcContrib.IncludeHandling 是否使用一些额外的(自制的?)DI?我能解决这个问题吗?有人用过这个并且可以分享一些经验吗?

    编辑:我想在整个过程中只有一个解析调用,我真的很想知道为什么他们使用DI来解决这个问题。。。想想那里的叉子。。。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Marc Climent    14 年前

    好, MvcContrib.IncludeHandling 使用MvcContrib的 DependencyResolver 找到必要的部件。它没有很好的文档记录(请参阅示例站点了解更多详细信息,尽管在这种情况下使用了定制的注入器)。

    MvcContrib.Castle WindsorDependencyResolver 对于可以模仿使用NInject的IoC容器(如果你到处搜索,可能会有一些东西)。 初始化相当冗长,但如下所示(容器是Windsor容器,在您的情况下,使用NInject):

    var httpContextProvider = new HttpContextProvider(HttpContext.Current);
    var settings = IIncludeHandlingSettings)ConfigurationManager.GetSection("includeHandling");
    
    container.Register(Component.For(typeof(IIncludeReader)).ImplementedBy(typeof(FileSystemIncludeReader)));            
    
    container.Register(Component.For(typeof(IIncludeStorage)).ImplementedBy(typeof(StaticIncludeStorage)));           
    container.Register(Component.For(typeof(IKeyGenerator)).ImplementedBy(typeof(KeyGenerator)));
    container.Register(Component.For(typeof(IIncludeHandlingSettings)).Instance(settings));
    container.Register(Component.For(typeof(IHttpContextProvider)).Instance(httpContextProvider));
    container.Register(Component.For(typeof(IIncludeCombiner)).ImplementedBy(typeof(IncludeCombiner)));
    container.Register(Component.For(typeof(IncludeController)).ImplementedBy(typeof(IncludeController)).LifeStyle.Transient);
    
    DependencyResolver.InitializeWith(new WindsorDependencyResolver(Container));
    

    这样您就可以注册所需的所有依赖项。请注意,您需要在web配置中使用includeHandler部分。

    <configSections>
        <section name="includeHandling" type="MvcContrib.IncludeHandling.Configuration.IncludeHandlingSectionHandler, MvcContrib.IncludeHandling"/>
    </configSections>
    <includeHandling>
    </includeHandling>
    

    我希望这有帮助。

        2
  •  0
  •   xspydr    14 年前

    http://www.asp.net/ajaxlibrary/ajaxminquickstart.ashx

    它附带了一个MS-Build任务,你可以在其中设置它将在你的项目中找到和缩小Css和Js文件。。。

        3
  •  0
  •   Sean    14 年前

    这里是DependencyResolver设置的统一版本。我把它作为一个统一容器扩展。

    public class ConfigureMvcContrib : UnityContainerExtension
    {
        protected override void Initialize()
        {
            var settings = (IIncludeHandlingSettings)ConfigurationManager.GetSection("includeHandling");
    
            Container
                .RegisterFactory<IHttpContextProvider>(c => new HttpContextProvider(HttpContext.Current))
                .RegisterFactory<IIncludeReader>(c => new FileSystemIncludeReader(c.Resolve<IHttpContextProvider>()))
                .RegisterType<IIncludeStorage, StaticIncludeStorage>()
                .RegisterType<IKeyGenerator, KeyGenerator>()
                .RegisterFactory<IIncludeCombiner, IncludeCombiner>()
                .RegisterInstance<IIncludeHandlingSettings>(settings);
    
            DependencyResolver.InitializeWith(new UnityDependencyResolver(Container));
        }
    }
    

    值得注意的是,IncludeHandling设置并不适合web集群设置,因为它的缓存方式不同。我必须滚动我自己的控制器操作,需要一个文件列表来合并和缩小。我可以提供更多的信息,如果有人感兴趣。