عنوان:

‫توسعه Asp.net Core و Asp.net Core Identity


نویسنده: غفار منفرد
تاریخ: ۱۳۹۵/۰۵/۱۳ ۰:۴
آدرس: www.dntips.ir

از دوستان و نویسندگان سایت جهت مشارکت در پروژه ای که در Github قرار دادم با عنوان AspnetCoreMultilayer و بحث Customize Asp.net Core Identity و  Dependency Injection با StructureMap دعوت می‌کنم.

هدف : شخصی سازی و توسعه کامل یک Template کاربردی تحت وب از تکنولوژی جدید Asp.net Core




مشاهده مطلب اصلی

نظرات

  • غفار منفرد در ۱۳۹۵/۰۹/۰۳ ۵:۱۳
    ارتقا به  Net Core 1.1 طبق این منبع
  • وحید نصیری در ۱۳۹۵/۰۹/۰۳ ۸:۴۴
    من این مثال را بررسی کردم. این مشکلات را دارد:
    - به علت استفاده‌ی از AddEntityFrameworkStores، هیچکدام از سرویس‌های تعریف شده‌ی در لایه سرویس استفاده نخواهند شد و از همان پیش فرض‌های Identity Core استفاده می‌شود.
    - در Controllers از هیچکدام از سرویس‌های برنامه استفاده نشده‌است و از همان پیش فرض‌ها استفاده شده‌است.
    - در لایه سرویس (لایه‌ای که از آن عملا استفاده نمی‌شود)،  ApplicationRoleStore و ApplicationUserStore سازنده‌ای را دریافت می‌کنند که در تنظیمات IoC Container پیاده سازی برای آن‌ها ارائه نشده‌است (و در صورت استفاده عملا کار نخواهند کرد؛ مگر اینکه از همان پیش فرض‌های AddEntityFrameworkStores استفاده کنند که عملا این سفارشی سازی را بی‌اثر می‌کند).
    • غفار منفرد در ۱۳۹۵/۰۹/۱۹ ۱۵:۲۵
      در ابتدا از توجه شما سپاسگزارم.

      تغییرات نسبت به سفارش سازی Identity :
      1- AppDbContext
      2- ApplicationUser
      3- Startup
      بنده مشکلی که با سفارش سازی کامل و مخصوصا Identity دارم خطایی در بخش IoC همین پروژه نسبت به IUserStore هست :

      ErrorCS0311The type 'SampleFive.DomainLayer.Models.ApplicationRole' cannot be used as type parameter 'TRole'
       in the generic type or method 'UserStore<TUser, TRole, TContext, TKey, TUserClaim, TUserRole, TUserLogin, TUserToken>'.
       There is no implicit reference conversion from 'SampleFive.DomainLayer.Models.ApplicationRole' to
       'Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole<int, SampleFive.DomainLayer.Models.ApplicationUserRole, Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim<int>>'.
       SampleFive.IoC..NETCoreApp,Version=v1.1
      H:\WebApp\CustomizeAspdotnetCore\src\SampleFive.IoC\AppIocConfig.cs32Active

      و زمانی که این خط از کد را به شکل زیر تغییر میدهم و از کلاس پیشفرض Identity استفاده میکنم خطای بالا برطرف می‌شود دقیقا مشکل از کجاست هنوز درک نکردم!
      public class ApplicationRole : IdentityRole<int, ApplicationUserRole, IdentityRoleClaim<int>>

      عملا با جایگزین کردن خط بالا، این مورد غیر فعال خواهد شد و در این خط با خطای زیر مواجه خواهیم شد:

      ErrorCS0311The type 'SampleFive.DomainLayer.Models.ApplicationRole' cannot be used as type parameter 'TRole'
       in the generic type or method 'IdentityDbContext<TUser, TRole, TKey, TUserClaim, TUserRole, TUserLogin, TRoleClaim, TUserToken>'.
       There is no implicit reference conversion from 'SampleFive.DomainLayer.Models.ApplicationRole' to
       'Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole<int, SampleFive.DomainLayer.Models.ApplicationUserRole, SampleFive.DomainLayer.Models.ApplicationRoleClaim>'.
      SampleFive.DataLayer..NETCoreApp,Version=v1.1
      H:\WebApp\CustomizeAspdotnetCore\SampleFive.DataLayer\Context\ApplicationDbContext.cs16Active
      • وحید نصیری در ۱۳۹۵/۰۹/۱۹ ۱۸:۴۰
        در لایه سرویس، ارث بری‌های دو سرویس ذیل را باید به صورت زیر تغییر دهید:
        public class ApplicationRoleStore :
                RoleStore<Role, ApplicationDbContext, int, UserRole, RoleClaim>,
                IApplicationRoleStore
        
        
        public class ApplicationUserStore :
                UserStore<User, Role, ApplicationDbContext, int, UserClaim, UserRole, UserLogin, UserToken, RoleClaim>,
                IApplicationUserStore
        بعد از آن تمام سازنده‌های مورد نیاز کلاس‌های لایه سرویس باید جهت تزریق و استفاده‌ی از اینترفیس‌های همین لایه تغییر کنند.

        پ.ن.
        این مورد بحث «بسیار» مفصلی هست که اینجا امکانش نیست و حتما نیاز به ارائه‌ی یک solution کامل دارد تا قابل درک باشد: «سفارشی سازی ASP.NET Core Identity - قسمت اول - موجودیت‌های پایه و DbContext برنامه »