Saya memiliki ProjectName.Core
perpustakaan yang berisi semua logika bisnis dan entitas saya serta perilaku mereka. Saat ini tidak ada hubungan apa pun dengan Entity Framework atau DAL lainnya karena saya suka memisahkan hal-hal itu. Konfigurasi Entity Framework (menggunakan API Lancar) berada di ProjectName.Infrastructure
proyek sehingga mengurus mendorong entitas saya ke EF. Pada dasarnya saya akan ke arah arsitektur seperti bawang.
Namun, ketika menambahkan kerangka ASP.NET Identity ke dalam campuran, saya harus membuat ApplicationUser
entitas saya mewarisi dari IdentityUser
kelas tetapi ApplicationUser
kelas saya memiliki hubungan dengan entitas lain. Dalam mewarisi dari IdentityUser
saya memperkenalkan referensi ke Kerangka Entitas dalam proyek entitas saya, satu tempat di mana saya tidak ingin melakukannya. Menarik ApplicationUser
kelas keluar dari proyek entitas dan ke dalam Infrastructure
proyek (karena menggunakan sistem identitas berbasis Entity Framework) akan menghasilkan referensi melingkar, jadi itu juga bukan cara untuk pergi.
Apakah ada cara untuk mengatasi hal ini sehingga saya dapat menjaga pemisahan yang bersih antara kedua lapisan selain tidak menggunakan ASP.NET Identity?
sumber
Jawaban:
Anda bisa membuat kelas pengguna yang tidak ada hubungannya dengan ASP.NET Identity di pustaka inti Anda.
Jika Anda menggunakan Entity Framework, buat kelas konfigurasi untuk entitas Anda (opsional).
Anda juga harus membuat kelas untuk Peran, UserClaim, dan UserLogin . Anda dapat memberi nama mereka apa pun yang Anda pilih jika Anda tidak menyukai nama-nama di atas.
Di lapisan web, buat kelas yang disebut AppUser (Atau nama lain jika Anda memilih). Kelas ini harus mengimplementasikan antarmuka ASP.NET Identity IUser <TKey> , di mana TKey adalah tipe data untuk kunci utama ( Guid dalam contoh di atas).
Ubah semua referensi ke UserManager di proyek web ke UserManager <AppUser, Guid> .
Terakhir, buat UserStore Anda sendiri . Pada dasarnya, UserStore kustom akan mengambil objek AppUser , mengubahnya menjadi objek entitas Pengguna , lalu bertahan. Contoh dari salah satu metode ini ditunjukkan di bawah ini:
Untuk mendapatkan deskripsi lengkap tentang kemungkinan implementasi, klik di sini .
Pada akhirnya, itu pilihan Anda. Ukur jumlah upaya yang diperlukan bagi Anda untuk mempertahankan implementasi ini versus hanya merujuk kerangka kerja Identity di perpustakaan Core Anda. Secara pribadi, saya berpikir untuk melakukannya dengan cara yang saya jelaskan di atas, namun, saya tidak melakukannya karena saya berpotensi harus mengubah kode saya setiap kali kerangka ASP.NET Identity diperbarui.
Semoga ini membantu dan menjawab pertanyaan Anda!
sumber