Как использовать Ninject DefinesNamedScope против InNamedScope?

#c# #ninject #named-scope

#c# #девятый объект #именованная область

Вопрос:

Мне очень трудно понять разницу между Ninject DefinesNamedScope и InNamedScope. Возможно, мое понимание сферы охвата неверно?!

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

Я вижу примеры в документации, но не могу перевести их в свои собственные проекты, см. Пример ниже:

Я пытаюсь сделать IClassA, IClassB «идущими вместе», но не 2 других.

 private void Button_Click_4(object sender, RoutedEventArgs e)  {  string scopeA = "scopeA";  var container = new StandardKernel(new MainModule());    var classRoot1 = container.CreateNamedScope(scopeA).Getlt;IClassRoot1gt;();  var classA1 = container.CreateNamedScope(scopeA).Getlt;IClassAgt;();  var classA2 = container.CreateNamedScope(scopeA).Getlt;IClassAgt;();   var classB1 = container.CreateNamedScope(scopeA).Getlt;IClassBgt;();  var classB2 = container.CreateNamedScope(scopeA).Getlt;IClassBgt;();   var classC1 = container.Getlt;IClassCgt;();  var classC2 = container.Getlt;IClassCgt;();   var classD2 = container.Getlt;IClassDgt;();  var classD1 = container.Getlt;IClassDgt;();     (classA1 as IJustProperty).Name = "a1";  (classA2 as IJustProperty).Name = "a2";   (classB1 as IJustProperty).Name = "b1";  (classB2 as IJustProperty).Name = "b2";   (classC1 as IJustProperty).Name = "c1";  (classC2 as IJustProperty).Name = "c2";  }   public class MainModule : NinjectModule {  public override void Load()  {  string scopeA = "scopeA";  Bindlt;IClassAgt;().Tolt;ClassAgt;().DefinesNamedScope(scopeA);  Bindlt;IClassBgt;().Tolt;ClassBgt;().InNamedScope(scopeA);  Bindlt;IClassCgt;().Tolt;ClassCgt;();  Bindlt;IClassDgt;().Tolt;ClassDgt;();  } }  public interface IJustProperty {  string Name { get; set; }  DateTime Created { get; set; }  int Number { get; set; } }  public class ClassRoot1 : IClassRoot1 { }  public interface IClassRoot1 { }   public class ClassA : IClassA, IJustProperty {  public string Name { get; set; }  public DateTime Created { get; set; }  public int Number { get; set; } }  public interface IClassA { }  public class ClassB : IClassB, IJustProperty {  private readonly IClassA _classA;   public ClassB(IClassA classA)  {  _classA = classA;  }   public string Name { get; set; }  public DateTime Created { get; set; }  public int Number { get; set; } }  public interface IClassB { }  public class ClassC : IClassC, IJustProperty {  private readonly IClassB _classB;   public ClassC(IClassB classB)  {  _classB = classB;  }   public string Name { get; set; }  public DateTime Created { get; set; }  public int Number { get; set; } }  public interface IClassC { }  public class ClassD : IClassD, IJustProperty {  private readonly IClassC _classC;   public ClassD(IClassC classC)  {  _classC = classC;  }   public string Name { get; set; }  public DateTime Created { get; set; }  public int Number { get; set; } }  public interface IClassD { }