2010-01-26 4 views
1

SM에서 인스턴스 생성을 가로 채고 싶습니다. 다음을 시도하지만 InstanceInterceptor 구현을 호출하지 않습니다. 이유는 무엇입니까?StructureMap InstanceInterceptor가 호출되지 않음

ForRequestedType<IPublishResources>() 
.TheDefault 
.Is 
.OfConcreteType<PublisherService>() 
.InterceptWith(new PublisherServiceInterceptor()); 

는 테스트 코드는 인스턴스를 만들기 위해 ObjectFactory를 사용하고, 다음과 같습니다

AWC

// Given we have a configure object factory in StructureMap... 
ObjectFactory.Configure(x => x.AddRegistry(new StructureMapServiceRegistry())); 

// When we request a publisher service... 
var publisher = ObjectFactory.GetInstance<IPublishResources>(); 

건배

내가 릴리스 2.5.4에서 문제를 재현 할 수

답변

2

. 여기 내 코드가있다.

public interface IPublishResources {} 
class PublishResources : IPublishResources {} 
public class LoggingInterceptor : InstanceInterceptor 
{ 
    //this interceptor is a silly example of one 
    public object Process(object target, IContext context) 
    { 
     Console.WriteLine("Interceptor Called"); 
     return context.GetInstance<PublishResources>(); 
    } 
} 

public class MyRegistry : Registry 
{ 
    public MyRegistry() 
    { 
     For<IPublishResources>() 
      .Use<PublishResources>() 
      .InterceptWith(new LoggingInterceptor()); 
    } 
} 

[TestFixture] 
public class Structuremap_interception_configuraiton 
{ 
    [Test] 
    public void connecting_implementations() 
    { 
     var container = new Container(cfg => 
     { 
      cfg.AddRegistry<MyRegistry>(); 
     }); 

     container.GetInstance<IPublishResources>(); 
    } 
} 

질문. 정말로 요격기를 사용해야합니까? 팩토리를 정의하기 만하면 이런 식으로 할 수 있습니다.

public interface IPublishResourcesFactory 
{ 
    IPublishResources Create(); 
} 

public class MyRegistry : Registry 
{ 
    public MyRegistry() 
    { 
     For<IPublishResources>().Use(c => 
     { 
      return c.GetInstance<IPublishResourcesFactory>().Create(); 
     }); 

     //or 

     For<IPublishResources>().Use(c => 
     { 
      //other object building code. 
      return new PublishResources(); 
     }); 
    } 
} 
+0

당신과 나는 실제로 그것을 필요로하지 않으며 이미 코드를 변경했습니다 - 정보 덕분에 ... – AwkwardCoder

관련 문제