나는 약간의 문제가있다. Castle Windsor IOC Container에서 일하고 있습니다. 이제 내가하고 싶었던 것은 AOP 원리를 망쳐 놓은 것 뿐이고, 특히 로깅을 수행하는 메서드 이름을 기반으로하고 싶습니다. 나는 인터셉터를보고 있었고, 현재 IInterceptor 인터페이스를 사용하여이 로깅을 수행하는 클래스로 구현했다. 문제는 내가 메서드 이름 등을 확인하기 위해 구현 된 aspect에 어떤 로직을 넣어야하기 때문에 특정 메소드에 대한 로깅을 수행하려고하면 지저분해진다. ...윈저 컨테이너의 Castle Dynamic Proxy
나는 할 수 있다는 것을 읽었다. 이 모든 것은 동적 프록시와 IInterceptorSelector 인터페이스와 IProxyGenerationHook 인터페이스를 사용합니다. 나는 그물에 행해진 이것의 약간보기를 보았다 그러나 나는 모두가 Windsor 콘테이너로 어떻게에 맞는지 아주 혼동된다. 내 코드에서 실제로 모든 개체를 만들려면 IWindsorContainer 인터페이스에 대한 ref입니다 윈저 컨테이너를 사용하고 있음을 의미합니다. 모든 구성은 XML이 아닌 코드로 수행됩니다.
처음에는 누구나 내가 현재하고있는 방식 외에 윈저 컨테이너에서 메서드 특정 AOP를 수행하는 방법을 알고 있습니다.
둘째, 윈도 센서 컨테이너에서 동적 프록시를 어떻게 사용합니까? 나는 내 프록시를 생성하고 인터셉터
ProxyGenerator _generator = new ProxyGenerator(new PersistentProxyBuilder());
IInterceptorSelector _selector = new CheckLoggingSelector();
var loggingAspect = new LoggingAspect();
var options = new ProxyGenerationOptions(new LoggingProxyGenerationHook()) { Selector = _selector };
var proxy = _generator.CreateClassProxy(typeof(TestClass), options, loggingAspect);
TestClass testProxy = proxy as TestClass;
windsorContainer.Register(
Component.For<LoggingAspect>(),
Component.For<CheckLoggingAspect>(),
Component.For<ExceptionCatchAspect>(),
Component.For<ITestClass>()
.ImplementedBy<TestClass>()
.Named("ATestClass")
.Parameters(Parameter.ForKey("Name").Eq("Testing"))
.Proxy.MixIns(testProxy));
테스트 클래스 내 클래스를 등록하고 코드를 추가 한 아래
은 다음과 같습니다 : 그들이 인터셉터에 대한 같은
public class TestClass : ITestClass
{
public TestClass()
{
}
public string Name
{
get;
set;
}
public void Checkin()
{
Name = "Checked In";
}
}
아주 간단하고 이름이 Check로 시작하면 메소드를 입력하십시오.
이제 TestClass를 컨테이너에서 해결할 때 오류가 발생합니다.
은 { "이것은 DynamicProxy2 오류입니다 : 믹스 인 타입 TestClassProxy는 DynamicProxy 기반 인터페이스입니다 IProxyTargetAccessor를 구현하고 당신은 스스로를 구현해서는 안 기존 프록시 믹스 위해 노력하고 있습니다.?"}난 내가 알고 잘못된 방법으로 프록시를 사용하고 있지만 윈저 컨테이너에 프록시를 사용하는 방법에 대한 구체적인 예를 보지 못했기 때문에 혼란 스러울 수 있습니다.
내가 "LoggingProxyGenerationHook"을 사용하기를 원한다면 요격기가 먼저 "check"라는 단어로 시작하는 메소드를 먼저 알려준 다음 올바른 방법을 사용하거나 완전히 잘못된 경로에 있습니다. 나는 매우 강력한 것처럼 보이기 때문에 프록시 방식으로 내려 갔고 향후 프로그래밍 작업에이 프록시를 사용하는 방법을 알고 싶습니다.
동적 프록시를 Windsor 컨테이너와 함께 사용하는 방법을 명확히하기 위해 위의 구성에서 작동하도록 동적 프록시를 만드는 방법이나 동적 프록시가 완전히 다르게 작동하고 완전히 잘못 되었습니까? 감사합니다. – Iffy
ExceptionCatchAspect는 이미 DynamicProxy 인터셉터입니다. –
오, 그래서 동적 프록시를 사용하고 있습니다. 동적 프록시 객체가 실제로 만들어지고 인터셉터가 주입 된 예제를 보았습니다. 이 경우 코드에서 특정 측면을 어떻게 수행 할 것인가? 나는 이것이 IInterceptorSelector와 IProxyGenerationHook 인터페이스를 사용한다고 가정하지만, 동적 프록시의 새로운 인스턴스를 생성해야한다는 것을 보았고 이것이 윈저 컨테이너로 다시 연결되는 방식을 이해하지 못한다. 감사합니다. – Iffy