2015-03-12 19 views
8

Tôi đang cố gắng di chuyển IdentityModels.cs sang một dự án khác để giữ cho trang web tách biệt khỏi Lớp Truy cập Dữ liệu.Hình thức Web ASP.NET và Nhận dạng: Di chuyển IdentityModels.cs sang một dự án khác

Tôi đi theo hướng dẫn này: http://blog.rebuildall.net/2013/10/22/Moving_ASP_NET_Identity_model_into_another_assembly

Và cũng đã kiểm tra câu hỏi này ở đây: How to move MVC 5 IdentityModels.cs into a separate assembly

Nhưng tôi vẫn bối rối vì IdentityModels tài liệu tham khảo khác lớp được gọi là ApplicationUserManager như bạn có thể nhìn thấy dưới đây:

public class ApplicationUser : IdentityUser 
{ 
    public ClaimsIdentity GenerateUserIdentity(ApplicationUserManager manager) 
    { 
//code removed for simplicity 
    } 
} 

Khi tôi đi tìm lớp học đó, tôi đã tìm thấy nó trong dự án trang web bên trong một lớp học nằm ở: App_Start/IdentityConfig.cs

//...More code in the upper section 
public class SmsService : IIdentityMessageService 
{ 
    public Task SendAsync(IdentityMessage message) 
    { 
     // Plug in your SMS service here to send a text message. 
     return Task.FromResult(0); 
    } 
} 

// Configure the application user manager used in this application. UserManager is defined in ASP.NET Identity and is used by the application. 
public class ApplicationUserManager : UserManager<ApplicationUser> 
{ 
    public ApplicationUserManager(IUserStore<ApplicationUser> store) 
     : base(store) 
    { 
    } 
//More code bellow this... 

Bây giờ, điều này mang tôi đến đây vì tôi thực sự bị mất trong khuôn khổ ASP NET nhận dạng mới và tôi đã phải vật lộn với những thứ thực sự đơn giản mà dường như không đơn giản như vậy.

Làm cách nào để di chuyển IdentityModel sang một dự án khác mà không làm rối tung trang web của tôi ??

Một số dữ liệu bổ sung:

  • Sử dụng VS 2013 Cộng đồng
  • Sử dụng .NET Framework 4.5.1
+1

Tôi gặp vấn đề tương tự. Tôi đang làm việc trên nó, Nếu tôi nhận được một câu trả lời tôi sẽ đăng nó. – EduLopez

Trả lời

17

tôi đã thành công ngày hôm nay sau khi đọc một vài bài viết mà không có vẻ khá có tất cả các phần tôi cần. Tôi mong điều này giúp được người nào khác.

Mục tiêu của tôi: di chuyển các mô hình từ dự án web hiện tại sang một dự án khác. Điều này bao gồm các mô hình miền, logic nghiệp vụ và Mô hình nhận dạng ASP.

[EDIT: Bằng cách nào đó tôi đã bỏ lỡ câu hỏi đó là dành cho Biểu mẫu web. Tôi đã làm điều này trong MVC. Tuy nhiên, tôi tin rằng hầu hết vẫn sẽ giữ đúng với những gì tôi nhìn thấy trong một dự án mẫu web VS2013]

Từng bước:.

thêm thư viện lớp mới để giải pháp mang tên xyz.Models (xyz là không gian tên của dự án web hiện tại) - bằng cách sử dụng một cái gì đó khác như ModelLib là tốt, bạn sẽ chỉ phải tìm kiếm/thay thế các không gian tên sau đó trong khi trước đó bạn sẽ không.

Từ dự án web, di chuyển tất cả các mô hình miền sang thư viện lớp học. Tôi đã bao gồm lớp bối cảnh cơ sở dữ liệu (kỳ thi XyzContext.cs), tất cả các mô hình AspNet ... và IdentityModels.cs. Lưu ý: hãy để mặc định ManageViewModels.cs của microsoft ở thời điểm hiện tại.

Tiếp theo, tôi đã chuyển ManageViewModels.cs vào thư mục ViewModels của dự án web của tôi và thay đổi không gian tên của nó từ Mô hình thành Chế độ xem. Các tệp cshtml hiện có trong Chế độ xem/Quản lý cũng cần phản ánh thay đổi không gian tên này.

Tiếp theo, ManageViewModels.cs được sử dụng bởi ManageController.cs vì vậy tôi đã thêm ‘using xyz.ViewModels’ vào ManageController.cs.

Tiếp theo, với thư mục Mô hình trống trong dự án web của tôi, tôi đã loại trừ nó khỏi dự án.

Tiếp theo, từ App_Start web dự án, tôi di chuyển IdentityConfig.cs vào thư viện mô hình lớp và thay đổi nó namespace để xyz.Models (cũng loại bỏ tuyên bố 'bằng xyz.Models' của nó)

Tiếp theo, tôi đã thêm thư viện lớp (xyz.Models) làm tham chiếu đến dự án web.

Tiếp theo, tôi đã cài đặt gói NuGet sau vào Class Library

  • Microsoft.AspNet.Identity.EntityFramework
  • Microsoft.AspNet.Identity.Owin
  • Microsoft.Owin(Tôi vừa nhận được phiên bản mới nhất từ ​​NuGet, là hơi mới hơn và buộc tôi cập nhật tham chiếu hiện tại trên dự án web - dễ dàng sử dụng NuGet của Quản lý gói> Update)

Sau đây có thể không áp dụng đối với dự án của bạn, nhưng đây là những thứ khác tôi cần thiết trong thư viện lớp dựa trên một số lớp logic kinh doanh:

  • Một tham chiếu đến 'System.Web.Mvc'

  • Một tham chiếu đến 'System.Web '- Lưu ý: nó là cần thiết để thêm một tài liệu tham khảo dự án để System.Web vì tôi đã sử dụng HttpContextBase, HttpContext trong thư viện lớp (điều này đã gây nhầm lẫn ở đầu tiên kể từ lớp học của tôi đã đã có một tuyên bố 'using System.Web'. Tôi sẽ không bung ra lý do tại sao, nhưng chỉ cần đảm bảo bạn có ‘System.Web’ trong tài liệu tham khảo dự án của bạn (chỉ riêng System.Web.Mvc).

Trong khi ở đó, như sở thích riêng của tôi, tôi đã thay đổi “DefaultConnection” trong IdentityModels.cs tôi với bối cảnh cơ sở dữ liệu mà tôi đang sử dụng cho người khác của tôi (và xóa các tài liệu tham khảo trong web dự án web của tôi. config cho DefaultConnection, giữ "XyzContext".) Lưu ý: tất cả các bảng đều nằm trong cùng một db.

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("XyzContext", throwIfV1Schema: false) 
    { 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

Tại thời điểm này, biên soạn đã cho tôi lỗi một 'GetOwinContext' trong một trong các lớp học tùy chỉnh của tôi mà tôi đã tạo ra cho tập trung một số logic kinh doanh sắc aspnet. Để giải quyết vấn đề này, tôi cần một gói NuGet khác trong thư viện lớp học của mình: Microsoft.Owin.Host.SystemWeb.

Tất cả đều hoạt động tốt sau đó.

+0

Đừng nghĩ rằng tôi không thấy câu trả lời của bạn, tôi sắp kiểm tra từng bước của bạn để xem nó có hiệu quả với tôi hay không. Cảm ơn bạn đã chia sẻ và tôi sẽ cho bạn biết cách thực hiện. –

+0

cảm ơn, chúc may mắn – puddleglum

+0

Nó không bao giờ là quá muộn. Tôi đã thử nghiệm đề xuất của bạn từng bước và nó hoạt động vừa phải. Bạn nên sửa lỗi đánh máy trong tên gói ** Microsoft.AspNet.Identity.Owen ** thành ** Owin **. Đó là một điểm khởi đầu tốt để tiếp tục, cảm ơn! :) –

Các vấn đề liên quan