2017-11-14 3 views
0

dependecy가 주입되는 서비스의 유형을 Unity에서 얻을 수 있습니까? Ninject에서Unity get dependecy가 주입되는 서비스 유형

당신은 이런 식으로 작업을 수행 할 수 있습니다 같은 일이 Unity

kernel.Bind<ILogger>().ToMethod((context) => 
{ 
    ILogger logger = HttpContextLoggerFactory.GetInstance(); 

    // Eg: MyApplication.PeopleRepository 
    string memberType = context?.Request?.Target?.Member?.DeclaringType?.FullName; 

    return new LoggerMemberTypeDecorator(logger, memberType); 
}); 

구현 될 수있는 방법? 여기

내가 무엇을 가지고,하지만 난 당신이 특별한 InjectionConstructor로 (유형이 다음 주입 의존성의 생성자에보고됩니다) 서비스를 등록해야 어떤 context

container.RegisterType<ILogger>(new InjectionFactory(u => 
{ 
    ILogger logger = HttpContextLoggerFactory.GetInstance(); 

    // how to get it? 
    string memberType = ""; 

    return new LoggerMemberTypeDecorator(logger, memberType); 
}); 
+0

https://stackoverflow.com/questions/6846342/how-to-inject-log4net-ilog-implementations-using-unity-2 -0 –

+0

해당 답변 It 's aplicable – Catalin

답변

0

에 액세스 할 수 없습니다.

가 뻔뻔하게 내 자신의 대답을 복사 (자세한 내용을 here 참조)

container.RegisterType<IInterface, Implementation>(new MyInjectionConstructor()); 

internal class MyInjectionConstructor : InjectionMember 
{ 
    public override void AddPolicies(Type serviceType, Type implementationType, string name, IPolicyList policies) 
    { 
     policies.Set<IConstructorSelectorPolicy>(new MyConstructorSelectorPolicy(), new NamedTypeBuildKey(implementationType, name)); 
    } 
} 

internal class MyConstructorSelectorPolicy : DefaultUnityConstructorSelectorPolicy 
{ 
    protected override IDependencyResolverPolicy CreateResolver(ParameterInfo parameter) 
    { 
     if(parameter.ParameterType == typeof(ILogger)) 
     { 
      return new LiteralValueDependencyResolverPolicy(new Logger(parameter.Member.DeclaringType)); 
     } 
     return base.CreateResolver(parameter); 
    } 
} 
관련 문제