2

我想通过组合和缩小 javascript 和CSS文件来改进我的页面。由于MVCContrib已经包含一个名为 的项目IncludeHandling,我看了一下,不幸的是,它给我留下了未回答的问题:

该过程涉及到相当多的接口和对象。现在我正在使用Ninject.Mvc,但似乎MvcContrib.IncludeHandling正在使用一些额外的(自制?)DI?我可以解决这个问题吗?有没有人用过这个,可以分享一些经验吗?

其次,经常听到的建议是将静态内容放在不同的域上,这样请求就不会包含 cookie 等,从而使服务器更容易处理请求。但是我怎样才能将它与自动包含处理结合起来——这不是必须在同一个应用程序中提供吗?

编辑:认为整个事情中实际上只有一个解析调用,我真的想知道他们为什么使用 DI 来解决这个问题......考虑那里的叉子......

4

3 回答 3

2

好吧,MvcContrib.IncludeHandling使用 MvcContribDependencyResolver来查找必要的组件。它没有很好的记录(有关更多详细信息,请参见示例站点,尽管在这种情况下使用自定义注入器)。

例如,MvcContrib.Castle有一个WindsorDependencyResolver用于 IoC 的容器,你可以模仿它来使用 NInject(如果你用 Google 搜索可能会有一些东西)。初始化非常冗长,但是像这样(容器是 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>

我希望这会有所帮助。

于 2010-11-24T11:58:43.117 回答
0

查看 Asp.Net Ajax Minifier。http://www.asp.net/ajaxlibrary/ajaxminquickstart.ashx

它附带一个 MS Build 任务,您可以设置它在构建时将在您的项目中查找和缩小 Css 和 Js 文件的位置...

于 2010-10-01T15:06:41.407 回答
0

这是 DependencyResolver 设置的 Unity 版本。我将其作为 Unity 容器扩展。

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 集群设置并不理想,因为它执行缓存的方式。我不得不推出我自己的控制器操作,该操作需要一个文件列表来组合和缩小。如果有人感兴趣,我可以提供更多信息。

于 2011-03-15T21:50:18.270 回答