2014-07-20 2 views
0

내 솔루션 아키텍처는 다음과 같다 :4 프로젝트

MVC 4 - 프리젠 테이션 계층

관리자 클래스 라이브러리

DAL 라이브러리

일반 DTO 프로젝트 도서관.

이제 간단한 멤버십 관련 클래스를 추가하고 구현했습니다.

여기에 MVC 4 프로젝트에 필터가 존재하는데 - DBCONTEXT 개체 ... DBCONTEXT 개체로 잘못되었거나 DAL 참조가 MVC 4에 존재해서는 안되며 별도로 유지하려고합니다. DAL 프로젝트에만.

 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] 
    public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute 
    { 
    private static SimpleMembershipInitializer _initializer; 
    private static object _initializerLock = new object(); 
    private static bool _isInitialized; 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // Ensure ASP.NET Simple Membership is initialized only once per app start 
     LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock); 
    } 

    private class SimpleMembershipInitializer 
    { 
     public SimpleMembershipInitializer() 
     { 
      Database.SetInitializer<FinalEFFirstContext>(null); 

      try 
      { 
       using (var context = new FinalEFFirstContext()) 
       { 
        if (!context.Database.Exists()) 
        { 
         // Create the SimpleMembership database without Entity Framework migration schema 
         ((IObjectContextAdapter)context).ObjectContext.CreateDatabase(); 
        } 
       } 

       if (!WebSecurity.Initialized) 
       { 
        WebSecurity.InitializeDatabaseConnection("FinalEFFirstContext", "UserProfile", "UserId", "UserName", autoCreateTables: true); 
       } 


       if (!WebSecurity.ConfirmAccount("[email protected]") && !WebSecurity.UserExists("[email protected]")) 
       { 
        WebSecurity.CreateUserAndAccount("[email protected]", "password"); 
       } 


       if (!Roles.RoleExists("Administrator")) 
       { 
        Roles.CreateRole("Administrator"); 
        Roles.AddUserToRole("[email protected]", "Administrator"); 
       } 


      } 
      catch (Exception ex) 
      { 
       throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex); 
      } 
     } 

이 나를 인도 해주십시오 내가이 필터를 분리 할 수있는 방법 : 아래

필터 코드?

이 클래스를 Manager 클래스 라이브러리로 이동하고이 모든 MVC 참조를 거기에 추가해야합니까?

당신은

답변

0

예, 당신이 (당신 문맥 클래스가있는 경우) 당신 DAL 층으로 InitializeSimpleMembershipAttribute 이동 고려할 수 있습니다 감사합니다.

IMO 영구 저장소에 액세스하기 위해 추상화에 의존하는 한 DAL에 대한 참조는 웹 프로젝트에있는 것이 좋습니다. 예를 들어 IDataContext에서 데이터 컨텍스트를 파생시킵니다. IDataContext 인터페이스를 구현하는 현재 datacontext는 EF를 ORM으로 사용합니다. 그러나 내일 우리가 다른 ORM을 NHibernate라고 바꾸려면, IDataContext을 구현하고 새로운 DataContext를 해결하기 위해 의존성을 변경해야한다.

그렇다면 웹 프로젝트에서 우리가 데이터에 액세스하는 방법과 위치를 알 수 없어야합니다. 웹 프로젝트에서 EntityFramwork에 대한 참조를 제공하지 않으면이 작업을 수행 할 수 있습니다. ORM 또는 데이터 액세스 기술을 변경하려는 경우 웹 프로젝트가 영향을받지 않는 한 DAL 참조는 문제가되지 않습니다. 그때 DAL에 InitializeSimpleMembershipAttribute를 이동하는 경우

SolutionStructure

+0

이 어떻게에 주석으로 추가 할 수 있습니다 : 그것은 당신을 도움이된다면

나는, DAL 당신에게 내 솔루션 EF에 참조 할 보여줍니다 구조와 필터를 표시 할 수 있습니다 웹 프로젝트의 AccountController? 웹 프로젝트에는 DAL 참조가 아닌 Bussiness 클래스 라이브러리의 참조가 포함되어 있기 때문입니다. – user3711357