मुझे लगता है कि यह काफी काम करने योग्य है - लेकिन इससे पहले कि मैं अपने समाधान में जाऊं - याद रखें कि बंडल पहली हिट पर बनाया गया है और इसका पुन: उपयोग किया गया है - इसका मतलब है कि किसी भी 'गतिशील' स्क्रिप्ट को अभी भी वैश्विक होना चाहिए (यानी यह नहीं हो सकता है एक विशिष्ट उपयोगकर्ता आदि पर निर्भर हो)। यही कारण है कि आम तौर पर यह केवल स्थिर जेएस फाइलों की अनुमति देता है। यह कहकर ... मैं ऐसी स्थिति की कल्पना कर सकता हूं जहां आप संस्करण संख्या या अपने जेएस में ऐसा कुछ वैरिएबल चिपकाना चाहें (हालांकि उस मामले में मैं व्यक्तिगत रूप से इसे पाने के लिए अजाक्स/जेएसओएन का उपयोग करता हूं)।
मुझे लगता है कि इसके बारे में जाने का तरीका Bundle से व्युत्पन्न प्रकार बनाना है। इसमें आप EnumerateFiles विधि को ओवरराइट करेंगे। शुरुआत में आप आधार पर गणना करेंगे। अनन्य फ़ाइल और फिर अपनी खुद की वर्चुअल फ़ाइल शामिल करें।
कुछ (ध्यान दें: नहीं परीक्षण किया कोड): जैसे
public class VirtualMethodBundle : Bundle
{
private List<VirtualFile> _virtualContent = new List<VirtualFile>();
public override IEnumerable<VirtualFile> EnumerateFiles(BundleContext context)
{
foreach(var file in base.EnumerateFiles(context))
{
yield return file;
}
foreach(var virtual in _virtualContent)
{
yield return virtual;
}
}
public void AddCustomFile(VirtualFile file)
{
_virtualContent.Add(method);
}
}
तो फिर तुम एक विशेष VirtualFile परिभाषित प्रकार है कि ओपन/नाम विधि ओवरराइड करता है और आपकी गतिशील सामग्री देता है ... की तरह कुछ होगा।
public class MethodBasedVirtualFile : VirtualFile
{
private readonly Func<string> _contentFactory;
private readonly string _path;
public MethodBasedVirtualFile(string path, Func<string> contentFactory)
{
_path = path;
_contentFactory = contentFactory;
}
public override string Name { get { return _path; } }
public override Stream Open()
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(_contentFactory());
writer.Flush();
stream.Position = 0;
return stream;
}
}
तो फिर यह सब आप के लिए होता है उपयोग करने के लिए ...
var bundle = new VirtualMethodBundle();
bundle.Include(... real files ...);
bundle.AddCustomFile(
new MethodBasedVirtualFile("~/DynamicScript/UrlDictionary",
... the method that creates the content of that script...)
);
यदि आप चतुर तुम सिर्फ एक UrlVirtualFile कि url पथ लेता है और का उपयोग करता MVC जब स्वचालित रूप से सामग्री प्राप्त करने के कर सकते थे की आवश्यकता है।
आप EnumerateFiles अधिभावी कर रहे हैं() वापसी प्रकार, यह IEnumerable IEnumerable नहीं है:
यहाँ BundleResult कार्यान्वयन है। कोड संकलित नहीं होगा। –