0

Как получить унаследованный тип вместо Базовый тип, когда унаследованный тип, помеченный атрибутом.Ninject: Как получить унаследованный тип вместо Базовый тип, когда унаследованный тип, помеченный атрибутом

Можем ли мы сделать это с помощью Ninject или нет?

static void Main(string[] args) 
    { 
     IKernel kernel = new StandardKernel(); 
     // use Method which return properly type 
     kernel.Bind<IBase>().ToMethod(context => SOMEMETHOD()); 
     // should be return DerivedClass 
     BaseClass derived = kernel.Get<BaseClass>(); 
     BaseClass1 derived1 = kernel.Get<BaseClass1>(); 

В результате должно быть

 derived.WhoIAm(); //-- - > "DerivedClass" 
     derived1.WhoIAm(); //-- - > "DerivedClass1" 
    } 
    // method which resolve this 
    static object SOMEMETHOD(){ // return derived class wich marked by //SomeAttribure where base class that which we use in kernel.Get 

}

BasesClass

class BaseClass : IBase 
    {  
     public virtual void WhoIAm() 
     { 
      Console.Write(this.GetType()); 
     } 
    } 
class BaseClass1 : IBase 
    {  
     public virtual void WhoIAm() 
     { 
      Console.Write(this.GetType()); 
     } 
    } 

Унаследованные классы. Атрибут, который промаркирован тип, который Шоуде создан

[SomeAttribure] 
    class DerivedClass : BaseClass 
    { 

     public override void WhoIAm() 
     { 
      Console.Write(this.GetType()); 
     } 

    }  

Другое Производный класс, унаследованный от BaseCalss1

[SomeAttribure] 
    class DerivedClass1 : BaseClass1 
    { 

     public override void WhoIAm() 
     { 
      Console.Write(this.GetType()); 
     } 

    }  
    class SomeAttribure : Attribute {} 

    interface IBase 
    { 
     void WhoIAm(); 
    } 

ответ

0

Посмотрите на расширение конвенции. Должно быть прямо. Что-то вроде

kernel.Bind(x => 
{ 
    x.FromThisAssembly() 
    .SelectAllClasses() 
    .WithAttribute<SomeAttribute>() 
    .BindBase(); 
}); 
Смежные вопросы