2013-10-08 1 views
1

У меня есть класс, как это:Какую привязку Ninject можно использовать, чтобы один параметр использовался в конструкторе для другого?

public class MyClass 
{ 
    public MyClass(IService service) 
    { 
     this.Service = service; 
     this.Dependency = new Dependency(service); 
    } 
} 

Я хочу, чтобы переместить new Dependency() вызов конструктора.

public class MyClass 
{ 
    public MyClass(IService service, IDependency dependency) 
    { 
     this.Service = service; 
     this.Dependency = dependency; 
    } 
} 

Я не могу работать, как связать это с тем, что IDependency создается с service аргумента конструктора.

Bind<IDependency>() 
    .To<Dependency>() 
    .WithConstructorArgument("service", ctx => ctx.???); // How do I do this? 
+0

Dupe того же вопроса, который вы задали за несколько часов до: http://stackoverflow.com/questions/19253827/how-do-i-bind-a-class-which-takes-its-parent-class-in -the-constructor-with-ninje/19253923 # comment28502654_19253923 – Killnine

+0

@ Killnine это похожие, но разные вопросы. Другой - о «этом». – shamp00

ответ

1

Итак, вы хотите иметь один и тот же экземпляр IService быть CTOR закачивается в несколько объектов. Есть 2ways для достижения этой цели:

  • области действия связывания IService: .InSingletonScope(), InCallScope(), InNamedScope ("А") и т.д. (см https://github.com/ninject/ninject/wiki/Object-Scopes)
  • внедрить и использовать завод, чтобы создать MyClass , Затем фабрика 1 создает IService (IResolutionRoot.Get<IService>();), а затем создает экземпляр и возвращает MyClass с использованием аргумента ctor, p.Ex. как это: IResolutionRoot.Get<MyClass>(new ConstructorArgument("service", service);

Вы можете также связать IMyClass .ToProvider() и у поставщика осуществлять заводскую логику, чтобы избавиться от дополнительного заводского вызова. Но это делает привязку фактического целевого класса жестким, если вы хотите связать интерфейс с несколькими классами (с условиями или иным образом). См. How to use a Provider in Ninject

Creating an instance using Ninject with additional parameters in the constructor также может быть вам интересен.

Смежные вопросы