سؤال

أود تحسين صفحتي من خلال الجمع بين وجافا سكريبت CSS الملفات. حيث mvccontrib يحتوي بالفعل على مشروع يسمى IncludeHandling, ، ألقيت نظرة على ذلك، والذي تركني للأسف مع أسئلة دون إجابة:

هناك مجموعة كبيرة من الواجهات والأشياء المشاركة في هذه العملية. الآن أنا أستخدم Ninject.Mvc, ، ولكن يبدو ذلك MvcContrib.IncludeHandling يستخدم بعض الإضافي (المنازل المنزلية؟) دي؟ هل يمكنني العمل حول هذا؟ هل استخدم أي شخص هذا ويمكنه مشاركة بعض الخبرات؟

ثانيا، نصيحة غالبا ما سمعت هي وضع محتوى ثابت على المجالات المختلفة، لذلك لا يحتوي الطلب على ملفات تعريف الارتباط وما شابه ذلك، مما يجعله أسهل بكثير للخادم لمعالجة الطلب. ولكن كيف يمكنني الجمع بين هذا مع التعامل مع التضمين التلقائي - أليس هذا بالضرورة في نفس التطبيق؟

تحرير: احسب أن هناك بالفعل مكالمة واحدة فقط حل واحد في كل شيء، أتساءل حقا لماذا يستخدمون دي لذلك ... التفكير في شوكة هناك ...

هل كانت مفيدة؟

المحلول

نحن سوف، MvcContrib.IncludeHandling يستخدم MVCContrib DependencyResolver للعثور على المكونات اللازمة. انها ليست موثقة بشكل جيد للغاية (انظر موقع العينة لمزيد من التفاصيل، على الرغم من أنه في هذه الحالة يستخدم حاقن مخصص).

علي سبيل المثال، MvcContrib.Castle لديه أ WindsorDependencyResolver بالنسبة لحاوية IOC هذه التي يمكنك تقليدها لاستخدام Ninject (قد يكون هناك شيء إذا كنت جوجل حولك). التهيئة مطهوظة للغاية، ولكنه يذهب مثل هذا (الحاوية هو حاوية 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));

بهذه الطريقة يمكنك تسجيل جميع التبعيات اللازمة. احذر أنك بحاجة إلى قسم FlightHandler في تكوين الويب الخاص بك.

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

آمل أن يكون هذا ساعد.

نصائح أخرى

تحقق من asp.net ajax minifier. http://www.asp.net/ajaxlibrary/ajaxminquickstart.ashx.

يتم شحنها مع مهمة بناء MS التي يمكنك إعدادها حيث يقوم على الإنشاء، وسوف تجد وتقليل ملفات CSS و JS في مشروعك ...

فيما يلي نسخة وحدة من الإعداد DESTECTYSORESOLVER. فعلت ذلك كملحق للحاويات الوحدة.

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

تجدر الإشارة إلى أن الإعداد الملحق غير مثالي لإعداد نظام مجموعة ويب كما هو نظرا للطريقة التي يقوم بها التخزين المؤقت. اضطررت إلى لفة إجراء تحكم الخاص بي الذي أخذ قائمة بالملفات لتحديد وتقلص. يمكنني تقديم مزيد من المعلومات إذا كان أي شخص مهتم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top