‫۵ سال و ۹ ماه قبل، یکشنبه ۱۱ آذر ۱۳۹۷، ساعت ۲۱:۲۰
این نوع طراحی در الگوی Domain-driven design متداول می‌باشد و یکی از مواردی که در بازگشت لیست فقط خواندنی باید توجه داشت و در برخی از سایتها با آن برخورد می‌کنیم استفاده از
 public IReadOnlyList<object> Objects { get { return objects.ToList(); } }
به جای
 public IReadOnlyList<object> Objects { get { return objects.AsReadOnly(); } }
می‌باشد به طوری که در مثال اول کلیه اطلاعات داخل objects درون لیست جدید کپی می‌شود ولی در مثال دوم فقط ارجاعی به آدرسی که اطلاعات اصلی در آن قرار دارد شکل می‌گیرد و سربار کمتری دارد.
‫۵ سال و ۱۱ ماه قبل، سه‌شنبه ۱۷ مهر ۱۳۹۷، ساعت ۰۱:۴۶
سلام. اگر به جای اینکه AccessToken را به صورت دیتا برای کلاینت ارسال کنیم آنرا در Response Header قرار دهیم به طور مثال بعد از لاگین موفق به شکل ذیل:
Response.Headers.Add("AccessToken", accessToken);
در این حالت کلاینت هم این مقدار را ذخیره کرده و در درخواست‌های خود به سمت سرور ارسال می‌کند و در سمت سرور هم برای پیاده سازی امکان sliding expiration در رخداد OnTokenValidated بعد از چک کردن موارد مورد نظر دوباره AccessToken را ساخته و به 
Response Header اضافه نماییم آیا همین قدر کافی نمی‌باشد به جای ذخیره فیزیکی Token در دیتابیس؟
آیا به جای استفاده از قطعه کد
services.AddSingleton<IXmlRepository, DataProtectionKeyService>();
services.AddSingleton<IConfigureOptions<KeyManagementOptions>>(serviceProvider =>
{
return new ConfigureOptions<KeyManagementOptions>(options =>
{
var scopeFactory = serviceProvider.GetRequiredService<IServiceScopeFactory>();
using (var scope = scopeFactory.CreateScope())
{
options.XmlRepository = scope.ServiceProvider.GetService<IXmlRepository>();
}
});
});

با در نظر گرفتن مستندات، استفاده از کد زیر صحیح است ؟
services.Configure<KeyManagementOptions>(options => options.XmlRepository = new DataProtectionKeyService(services.BuildServiceProvider()));
با سلام و احترام
بعد از ارتقاء به ASP.NET Core 2.1 فیلد serviceProvider در متد GetAllElements پس از مراجعه dispose می‌شود و این در حالی است که اگر
services.AddScoped<IXmlRepository, DataProtectionKeyService>()
را به مقدار
services.AddSingleton<IXmlRepository, DataProtectionKeyService>()
تغییر دهیم مشکل رفع می‌شود.
آیا دلیل این موضوع تغییرات مربوط به Program.cs و متد CreateWebHostBuilder می‌باشد؟
با تشکر
‫۶ سال و ۷ ماه قبل، یکشنبه ۸ بهمن ۱۳۹۶، ساعت ۱۶:۲۵
نکته تکمیلی:
در صورت استفاده از شیوه Feature Folder Structure و نرم افزار Resharper، متوجه خواهید شد که Resharper مسیر View‌ها را به درستی تشخیص نمی‌دهد و در همان مسیر پیش فرض MVC به دنبال آنها می‌گردد.
برای رفع این مشکل ابتدا بسته
JetBrains.Annotations

را از طریق Nuget دریافت و نصب نموده و سپس در فایل FeatureLocationExpander و در بالای فضای نامی مقادیر زیر را بسته به نیاز خود وارد نمایید.

using JetBrains.Annotations;  
[assembly: AspMvcViewLocationFormat("~/Features/{1}/{0}.cshtml")] [assembly: AspMvcViewLocationFormat("~/Features/Shared/{0}.cshtml")] [assembly: AspMvcPartialViewLocationFormat("~/Features/{1}/{0}.cshtml")] [assembly: AspMvcPartialViewLocationFormat("~/Features/Shared/{0}.cshtml")]
از این پس نرم افزار Resharper می‌داند که View‌ها و Partial View‌ها را در کدام مسیرها باید جستجو کند.
لازم به ذکر است در صورت وجود Area می‌توان به طور مثال مقادیر زیر را نیز علاوه بر موارد ذکر شده وارد نمود.
[assembly: AspMvcAreaViewLocationFormat("~/Areas/{2}/Features/{1}/{0}.cshtml")]
[assembly: AspMvcAreaViewLocationFormat("~/Areas/{2}/Features/Shared/{0}.cshtml")]
[assembly: AspMvcAreaViewLocationFormat("~/Features/Shared/{0}.cshtml")]
[assembly: AspMvcAreaPartialViewLocationFormat("~/Areas/{2}/Features/{1}/{0}.cshtml")]
[assembly: AspMvcAreaPartialViewLocationFormat("~/Areas/{2}/Features/Shared/{0}.cshtml")]
[assembly: AspMvcAreaPartialViewLocationFormat("~/Features/Shared/{0}.cshtml")]
موفق باشد.

‫۷ سال قبل، سه‌شنبه ۱۴ شهریور ۱۳۹۶، ساعت ۱۴:۰۳
با سلام و احترام
در صورت ارتقاء به EF Core 2.0 دیگر نیازی به پیاده سازی ذکر شده نیست و می‌توان از پیاده سازی اینترفیس جدید IEntityTypeConfiguration به صورت ذیل استفاده نمود.

class CustomerConfiguration : IEntityTypeConfiguration<Customer>
{
  public void Configure(EntityTypeBuilder<Customer> builder)
  {
     builder.HasKey(c => c.AlternateKey);
     builder.Property(c => c.Name).HasMaxLength(200);
   }
}

...
// OnModelCreating
builder.ApplyConfiguration(new CustomerConfiguration());

موفق باشید.
‫۷ سال قبل، سه‌شنبه ۱۴ شهریور ۱۳۹۶، ساعت ۰۵:۳۴
با سلام و احترام
ظاهرا از این روش فقط زمانی میشه استفاده کرد که کلاس Context برنامه فقط یک سازنده با پارامتر ورودی DbContextOptions داشته باشه.آیا راه حلی برای این موضوع هست ؟
‫۷ سال و ۱ ماه قبل، یکشنبه ۲۹ مرداد ۱۳۹۶، ساعت ۰۲:۵۲
سلام
آیا از قابلیت FromService و تزریق سرویسها در سازنده مدل‌های برنامه فقط زمانی میتونیم استفاده کنیم که مدل‌ها و سرویس‌ها در یک پروژه باشن ؟
چون در غیر این صورت معمولا لایه سرویس ما لایه مدل رو به عنوان رفرنس اضافه میکنه و مجددا برعکس این حالت یعنی لایه مدل به سرویس غیر ممکن میشه.
‫۷ سال و ۱ ماه قبل، چهارشنبه ۲۵ مرداد ۱۳۹۶، ساعت ۱۷:۴۲
یک نکته‌ی تکمیلی:  ارتقاء به ASP.NET Core 2.0 

بر اساس مستندات دات نت Core 2.0،  در فایل Startup.cs، الزاما نیازی به تنظیمات ذیل
public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
        }
نیست و با جایگزین کردن این قطعه کد با
public IConfiguration Configuration { get; }

public Startup(IConfiguration configuration)
{
     Configuration = configuration;
}
و سپس انجام این تغییرات
public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
در فایل Program.cs موجب فراخوانی کلیه تنظیمات پیش فرض خواهد شد.
در واقع متد CreateDefaultBuilder این کار را انجام می‌دهد. البته همچنان امکان تنظیمات سفارشی نیز موجود است.
public static IWebHost BuildWebHost(string[] args)
{
  return WebHost.CreateDefaultBuilder()
    .ConfigureAppConfiguration((ctx, cfg) =>
    {
      cfg.SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("config.json", true) // require the json file!
        .AddEnvironmentVariables();
    })
    .ConfigureLogging((ctx, logging) => { }) // No logging
    .UseStartup<Startup>()
    .Build();
}

لازم به ذکر است سرویس IConfiguration از ابتدا در سیستم ثبت شده است و جهت دسترسی به تنظیمات میتوان در قسمت‌های مختلف برنامه آن را تزریق نمود.