2017-11-14 26 views
0

依存関係が注入されるサービスのタイプをUnityで得ることは可能ですか? NinjectUnity 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

それぞれの答えはありません – 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); 
    } 
} 
関連する問題