Necromancing।
হ্যাঁ আপনি
বড় মাইগ্রেশন করার জন্য গোপন পরামর্শ করতে পারেনjunksকোডের অংশগুলি (দীর্ঘশ্বাস, ফ্রয়েডিয়ান স্লিপ)।
নিম্নলিখিত পদ্ধতিটি হ্যাকের একটি অশুভ কার্বঙ্কাল যা শয়তানের এক্সপ্রেশন কাজ (। নেট কোর ফ্রেমওয়ার্ক বিকাশকারীদের দৃষ্টিতে) চালিত করতে সক্রিয়ভাবে নিযুক্ত রয়েছে, তবে এটি কার্যকর করে :
ভিতরে public class Startup
একটি সম্পত্তি যুক্ত করুন
public IConfigurationRoot Configuration { get; }
এবং তারপরে কনফিগার সার্ভিসগুলিতে ডিআই-তে একটি সিঙ্গলটন আইএইচটিটিপেক্সটেক্সট এ্যাকসেসর যুক্ত করুন।
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<Microsoft.AspNetCore.Http.IHttpContextAccessor, Microsoft.AspNetCore.Http.HttpContextAccessor>();
তারপরে কনফিগার করুন
public void Configure(
IApplicationBuilder app
,IHostingEnvironment env
,ILoggerFactory loggerFactory
)
{
ডিআই প্যারামিটার যুক্ত করুন IServiceProvider svp
, সুতরাং পদ্ধতিটি দেখে মনে হচ্ছে:
public void Configure(
IApplicationBuilder app
,IHostingEnvironment env
,ILoggerFactory loggerFactory
,IServiceProvider svp)
{
এর পরে, সিস্টেমের জন্য একটি প্রতিস্থাপন শ্রেণি তৈরি করুন e ওয়েব:
namespace System.Web
{
namespace Hosting
{
public static class HostingEnvironment
{
public static bool m_IsHosted;
static HostingEnvironment()
{
m_IsHosted = false;
}
public static bool IsHosted
{
get
{
return m_IsHosted;
}
}
}
}
public static class HttpContext
{
public static IServiceProvider ServiceProvider;
static HttpContext()
{ }
public static Microsoft.AspNetCore.Http.HttpContext Current
{
get
{
// var factory2 = ServiceProvider.GetService<Microsoft.AspNetCore.Http.IHttpContextAccessor>();
object factory = ServiceProvider.GetService(typeof(Microsoft.AspNetCore.Http.IHttpContextAccessor));
// Microsoft.AspNetCore.Http.HttpContextAccessor fac =(Microsoft.AspNetCore.Http.HttpContextAccessor)factory;
Microsoft.AspNetCore.Http.HttpContext context = ((Microsoft.AspNetCore.Http.HttpContextAccessor)factory).HttpContext;
// context.Response.WriteAsync("Test");
return context;
}
}
} // End Class HttpContext
}
এখন কনফিগার করুন, যেখানে আপনি IServiceProvider svp
এই পরিষেবা সরবরাহকারীটিকে সদ্য তৈরি করা ডামি ক্লাস সিস্টেম.সাহেব.এইচটিপি কনটেক্সট (সিস্টেম.ওয়েব.এইচটিপি কনটেক্সটস.সেস্প্রোভাইডার) এ স্ট্যাটিক ভেরিয়েবল "সার্ভিসপ্রোভাডার" এ সংরক্ষণ করুন)
এবং হোস্টিংএন্টারভায়রনমেন্টস.আইএস হোস্টেড সত্য হিসাবে সেট করুন
System.Web.Hosting.HostingEnvironment.m_IsHosted = true;
এটি মূলত সিস্টেম W ওয়েবেই করেছে যা আপনি কখনও দেখেননি (আমার ধারণা ভেরিয়েবলটি পাবলিকের পরিবর্তে অভ্যন্তরীণ হিসাবে ঘোষণা করা হয়েছিল)।
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider svp)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
ServiceProvider = svp;
System.Web.HttpContext.ServiceProvider = svp;
System.Web.Hosting.HostingEnvironment.m_IsHosted = true;
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationScheme = "MyCookieMiddlewareInstance",
LoginPath = new Microsoft.AspNetCore.Http.PathString("/Account/Unauthorized/"),
AccessDeniedPath = new Microsoft.AspNetCore.Http.PathString("/Account/Forbidden/"),
AutomaticAuthenticate = true,
AutomaticChallenge = true,
CookieSecure = Microsoft.AspNetCore.Http.CookieSecurePolicy.SameAsRequest
, CookieHttpOnly=false
});
ASP.NET ওয়েব ফরম মতো, আপনি একটি NullReference যখন আপনি অ্যাক্সেস করার চেষ্টা করছেন পাবেন একটি HttpContext যখন কেউ নেই, যেমন এতে ব্যবহার করা হয় Application_Start
global.asax হবে।
আমি আবারও জোর দিয়েছি, আপনি কেবল যুক্ত করলে এটি কেবল কাজ করে works
services.AddSingleton<Microsoft.AspNetCore.Http.IHttpContextAccessor, Microsoft.AspNetCore.Http.HttpContextAccessor>();
যেমনটা আমি লিখেছি তোমার উচিত।
ডিআই প্যাটার্নের মধ্যে সার্ভিসলোকেটার প্যাটার্নে আপনাকে স্বাগতম;)
ঝুঁকি এবং পার্শ্ব প্রতিক্রিয়াগুলির জন্য, আপনার আবাসিক চিকিৎসক বা ফার্মাসিস্টকে জিজ্ঞাসা করুন - বা github.com/aspnet এ .NET কোর এর উত্সগুলি অধ্যয়ন করুন এবং কিছু পরীক্ষা করুন।
সম্ভবত আরও বেশি রক্ষণাবেক্ষণের পদ্ধতিতে এই সহায়ক শ্রেণিটি যুক্ত করা হবে
namespace System.Web
{
public static class HttpContext
{
private static Microsoft.AspNetCore.Http.IHttpContextAccessor m_httpContextAccessor;
public static void Configure(Microsoft.AspNetCore.Http.IHttpContextAccessor httpContextAccessor)
{
m_httpContextAccessor = httpContextAccessor;
}
public static Microsoft.AspNetCore.Http.HttpContext Current
{
get
{
return m_httpContextAccessor.HttpContext;
}
}
}
}
এবং তারপরে স্টার্টআপ-> কনফিগারে HTTPContext.Configure- এ কল করুন
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider svp)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
System.Web.HttpContext.Configure(app.ApplicationServices.
GetRequiredService<Microsoft.AspNetCore.Http.IHttpContextAccessor>()
);
IHttpContextAccessor
এটি কেবলমাত্র ডিআই কনটেইনারটি সমাধান করে এমন জায়গায় পাওয়া যাবে।