OnMethodBoundaryAspect 및 OnMethodEntry/OnMethodExit에서 상속 한 aspect를 사용하여 aspect에서 Unity로 호출하여 로거를 해결 한 다음 로깅을 수행하십시오.
은 (클래스, 메소드 또는 조립 레벨)
[Serializable]
[MulticastAttributeUsage(MulticastTargets.Method, Inheritance=MulticastInheritance.Strict)]
public class LogAspect : OnMethodBoundaryAspect
{
public override void OnEntry(MethodExecutionArgs args)
{
var Logger = Unity.Resolve<T>();
Logger.Write(args.Method.Name + " enter");
}
public override void OnExit(MethodExecutionArgs args)
{
var Logger = Unity.Resolve<T>();
Logger.Write(args.Method.Name + " exit");
}
}
당신의 단결 컨테이너를 얻으려면 나는 서비스 로케이터 패턴을 사용하려면 어쨌든 화면을 적용합니다.
이하는 ILogger 클래스와 응용 프로그램 초기화 방법으로 수업 화면
public class LogAspect : OnMethodBoundaryAspect
{
/// <summary>
/// Gets or sets the logger.
/// </summary>
public static ILogger logger { get; set; }
세트 로거 변수에 정적 속성 로거를 추가하고이 초기화하기 전에 모든 방법을 제외 서비스 로케이터없이
public class iocServiceLocator
{
private static readonly IUnityContainer _container;
static iocServiceLocator()
{
_container = new UnityContainer();
}
public static void Initialize()
{
InitializeBootStrap();
}
private static void InitializeBootStrap()
{
//Register types here
}
public static T Get<T>()
{
return _container.Resolve<T>();
}
public static T Get<T>(string key)
{
return _container.Resolve<T>(key);
}
}
인터셉터를 사용하여 동적이고 유연하게 유지할 수있는 경우 왜 정적으로 (포스트) 컴파일을 코드에 컴파일 하시겠습니까? –
글쎄, 주로 이러한 클래스는 컨테이너의 일부가 아니기 때문에 – Michael