2016-01-21 9 views
0

Я пытаюсь условно связать зависимость, когда она вводится в определенное пространство имен. Я нашел Ninject article при условном переплетении, где он говорит следующее:Ninject - Включение зависимости в пространство имен

Мы также можем предоставить условную логику, предоставив делегата. В этом случае задается класс его имени и пространства имен.

Bind(). To(). Когда (request => request.Target.Member.Name.StartsWith ("ClassName")); Bind(). To(). Когда (request => request.Target.Type.Namespace.StartsWith ("NameSpace.ClassName"));

Так что я пытался реализовать это следующим образом:

Bind<ILogger>().ToMethod(x => new Logger("commissionServiceLogger")).When(x => x.Target.Type.Namespace.StartsWith("My.App.CommissionService")); 

Я получаю нулевой ссылочный исключение, хотя:

ссылка на объект не указывает на экземпляр объект.

Любая идея, что я делаю неправильно?

ответ

1

x.Target.Type предоставит вам зависимость, которую вы пытаетесь решить. В вашем случае это ILogger.

Я предполагаю, что вы хотите основать логику на типе объекта, в который нужно ввести ILogger. В этом случае вам нужно использовать x.ParentContext.Plan.Type как это:

Bind<ILogger>().ToMethod(x => new Logger("commissionServiceLogger")).When(x => 
{ 
    return x.ParentContext != null && 
     x.ParentContext.Plan 
     .Type.Namespace 
     .StartsWith("My.App.CommissionService"); 
}); 

ParentContext будет null в том случае, когда вы пытаетесь решить ILogger непосредственно.