자체 제작 MVC 프레임워크 기본 플러그인 소개

12450 단어 mvc
본고에서 소개한 기본 플러그인은BeforehandCommonAttribute나ProceedPlugin을 실현하는postsharp 플러그인이 아니라 사용자 정의의 기초적인 차단이며 프로젝트에서 자주 사용된다.
1). CompiledAttribute
방법 이름에 설정하면 프로그램이 MVC 모드를 처리한 후에 웹포름 작업을 구동하고 이들의 작업 모드가 결합된 것을 설명하는 데 사용된다.
컨트롤러 코드:
namespace Jobmate.Controllers

{

    public class Default

    {

        [Compiled]

        public virtual IDictionary Compiled1(IDictionary context)

        {

            context.Add("x", "b");

            return context;

        }

    }

}

 
Compiled1.aspx 페이지 코드:
페이지 끝:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Compiled1.aspx.cs" Inherits="integration_class_Compiled1" %>

<%="aaa"%>

 
페이지 백엔드 호출:
public partial class integration_class_Compiled1 : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        //         hashtable,         ,         

        IDictionary context = (IDictionary)HttpContext.Current.Items["context"];

        Response.Write(context["x"]);

    }

   

}

 
2). DynamicAttribute
클래스 이름에 설정하면 이 클래스가 동적으로 차단되어야 한다는 것을 나타냅니다.aspectsharp를 통해 차단됩니다.
컨트롤러 코드:
namespace Jobmate.Controllers

{

    [Dynamic]

    public class Default

{

             /// <summary>

        ///        

        /// </summary>

        /// <param name="context"></param>

        /// <returns></returns>

        [IP(AspectPriority = 0)]

        public virtual IDictionary Dynamic1(IDictionary context)   //      ,      

        {

            context.Add("x", "b");

            return context;

        }

    }

}

 
Web.config 구성:
<configuration><!--AOP  ,         Stephen.Core.Proxy         ,    ,advice       -->

         <aspectsharp>

                   <configuration>

                            aspect processor1 for [Jobmate.Controllers]

                                     pointcut method(* Dynamic1(*))

                                               advice(ShareInterceptor)

                                     end

                            end

                   </configuration>

         </aspectsharp></configuration>

 
 
차단기 ShareInterceptor 코드:
namespace Jobmate.Controllers.Interceptor

{

    [Serializable]

    public class ShareInterceptor : AspectInterceptor

    {

        public override void Proceed(IDictionary myContext)

        {

            myContext.Add("aaa", "xxx");

        }

    }

}

 
Dynamic1.aspx에서 $aaa만 입력
 
실행 후 페이지 출력: xxx
3). HasSessionAttribute
방법 이름에 설정하면 이 방법은 세션 기능이 있고 기본 방법은 세션 기능이 없다는 것을 나타낸다.
컨트롤러 코드:
namespace Jobmate.Controllers

{

    [Dynamic]

    public class Default

    {

        /// <summary>

        ///   ValidateKey      

        /// </summary>

        /// <param name="context"></param>

        /// <returns></returns>

        [Insert(AspectPriority = 2, Key = "Jobmate.Users", StatementID = "UserOpt", ValidateKey = "ValidateNO")]

        [LongID(AspectPriority = 1)]

        [FormData(AspectPriority = 0)]

        [HasSession]

        public virtual object Create3Action(IDictionary context)

        {

            long s = Convert.ToInt64(context[InsertAttribute.ValueKey]);

            string st;

            if (s > 0)

                st = "    !";

            else

                if (s == -404)

                    st = "      !";

                else

                    st = "    !";

            HttpContext.Current.Response.Write("<script>alert('" + st + "');document.location.href='HashSession1.aspx'</script>");

            HttpContext.Current.Response.End();

            return s;

        }

}

}

 
4). OutputCacheAttribute
방법 이름에 캐시 페이지가 연결된 문자열을 설정하고 다음에 페이지를 열면 캐시 문자열을 직접 가져옵니다. 관련 작업을 처리하지 않아도 됩니다.
속성 이름
역할
기본값
옵션 설명
기타 설명
Duration
만료 시간(초)
30
선택 사항
 
VaryByParam
캐시 매개 변수, 쉼표로 구분하고, 페이지는 매개 변수가 변하지 않으면 캐시의 내용을 출력합니다. (대소문자 구분)
빈값
선택 사항
 
컨트롤러 코드:
namespace Jobmate.Controllers

{

    [Dynamic]

    public class Default

    {

        /// <summary>

        ///   100 ,                   

        /// </summary>

        /// <param name="context"></param>

        /// <returns></returns>

        [OutputCache(Duration = 100)]

        [Get(Key = "Jobmate.Users.UserOpt")]

        public virtual IDictionary OutputCache1(IDictionary context)

        {

            return context;

        }

}

}

 
5).WebForm 페이지를 통해 직접
새 웹form은 제어층에 대응하는 방법이 없으면 웹form의 원래 호출을 실행합니다.
 
이상의 방식은 데모에서 체험할 수 있습니다.
demo 다운로드:
http://files.cnblogs.com/netcorner/%E5%9F%BA%E7%A1%80%E6%8F%92%E4%BB%B6%E6%BC%94%E7%A4%BA.rar

좋은 웹페이지 즐겨찾기