架构中两个深度的上下文绑定

发布于 2024-12-03 00:10:05 字数 3123 浏览 0 评论 0原文

考虑以下集成测试。我想找到一种方法使最后一个 Bind<>正确调用函数。

using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Ninject;
using Ninject.Modules;

namespace Cdpq.GCD.Test.Intégration.Ninject
{
   internal interface ISourceDonneesIterable { }
   class SourceDonnesExtract : ISourceDonneesIterable {}
   class SourceDonneesPositionsRendements : ISourceDonneesIterable {}


   interface IFactoryModeleSuiviBornes { }
   class FactoryModeleSuiviBornes : IFactoryModeleSuiviBornes{}

   class FactoryStructureFinanciereRendements : IFactoryModeleSuiviBornes
   {
      [Inject] public ISourceDonneesIterable sourcePositions { get; set;}
   }


   class _ControlleurTableauDeBordDirEstimatif
   {
      [Inject]
      public IFactoryModeleSuiviBornes modeleSuiviBornes { get; set; }
   }

   class _ControlleurTableauDeBordDir
   {
      [Inject]
      public IFactoryModeleSuiviBornes modeleSuiviBornes { get; set; }
   }

   class BindingModule : NinjectModule {
      public override void Load()
      {
         Bind<IFactoryModeleSuiviBornes>().To<FactoryModeleSuiviBornes>();

         Bind<IFactoryModeleSuiviBornes>().To<FactoryStructureFinanciereRendements>().WhenInjectedInto(typeof(_ControlleurTableauDeBordDirEstimatif));

         Bind<ISourceDonneesIterable>().To<SourceDonneesPositionsRendements>();

         Bind<ISourceDonneesIterable>().To<SourceDonnesExtract>();
      }
   }

   /// <summary>
   /// Summary description for UnitTest1
   /// </summary>
   [TestClass]
   public class UnitTest1
   {

      [TestMethod]
      public void integrat_test_ninject_binding()
      {
        var Modules = new List<NinjectModule>()
        {
            new BindingModule(),
        };

        StandardKernel ObjectFactory = new StandardKernel(Modules.ToArray());

         var tb = ObjectFactory.Get<_ControlleurTableauDeBordDir>();
         Assert.IsInstanceOfType(tb.modeleSuiviBornes, typeof(FactoryModeleSuiviBornes));

         var tbEst = ObjectFactory.Get<_ControlleurTableauDeBordDirEstimatif>();
         Assert.IsInstanceOfType(tbEst.modeleSuiviBornes, typeof(FactoryStructureFinanciereRendements));

         Assert.IsInstanceOfType(tbEst.modeleSuiviBornes, typeof(FactoryStructureFinanciereRendements));

         var factory = (FactoryStructureFinanciereRendements) tbEst.modeleSuiviBornes;
         Assert.IsInstanceOfType(factory.sourcePositions, typeof(SourceDonnesExtract));

      }
   }

我的绑定代码由 SO 编辑器进行了处理,但在这里

  class BindingModule : NinjectModule {
      public override void Load()
      {
         Bind<IFactoryModeleSuiviBornes>().To<FactoryModeleSuiviBornes>();

         Bind<IFactoryModeleSuiviBornes>().To<FactoryStructureFinanciereRendements>().WhenInjectedInto(typeof(_ControlleurTableauDeBordDirEstimatif));

         Bind<ISourceDonneesIterable>().To<SourceDonneesPositionsRendements>();

         Bind<ISourceDonneesIterable>().To<SourceDonnesExtract>();
      }
  }

Consider the following integration test. I want to find a way to make the last Bind<> call function correctly.

using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Ninject;
using Ninject.Modules;

namespace Cdpq.GCD.Test.Intégration.Ninject
{
   internal interface ISourceDonneesIterable { }
   class SourceDonnesExtract : ISourceDonneesIterable {}
   class SourceDonneesPositionsRendements : ISourceDonneesIterable {}


   interface IFactoryModeleSuiviBornes { }
   class FactoryModeleSuiviBornes : IFactoryModeleSuiviBornes{}

   class FactoryStructureFinanciereRendements : IFactoryModeleSuiviBornes
   {
      [Inject] public ISourceDonneesIterable sourcePositions { get; set;}
   }


   class _ControlleurTableauDeBordDirEstimatif
   {
      [Inject]
      public IFactoryModeleSuiviBornes modeleSuiviBornes { get; set; }
   }

   class _ControlleurTableauDeBordDir
   {
      [Inject]
      public IFactoryModeleSuiviBornes modeleSuiviBornes { get; set; }
   }

   class BindingModule : NinjectModule {
      public override void Load()
      {
         Bind<IFactoryModeleSuiviBornes>().To<FactoryModeleSuiviBornes>();

         Bind<IFactoryModeleSuiviBornes>().To<FactoryStructureFinanciereRendements>().WhenInjectedInto(typeof(_ControlleurTableauDeBordDirEstimatif));

         Bind<ISourceDonneesIterable>().To<SourceDonneesPositionsRendements>();

         Bind<ISourceDonneesIterable>().To<SourceDonnesExtract>();
      }
   }

   /// <summary>
   /// Summary description for UnitTest1
   /// </summary>
   [TestClass]
   public class UnitTest1
   {

      [TestMethod]
      public void integrat_test_ninject_binding()
      {
        var Modules = new List<NinjectModule>()
        {
            new BindingModule(),
        };

        StandardKernel ObjectFactory = new StandardKernel(Modules.ToArray());

         var tb = ObjectFactory.Get<_ControlleurTableauDeBordDir>();
         Assert.IsInstanceOfType(tb.modeleSuiviBornes, typeof(FactoryModeleSuiviBornes));

         var tbEst = ObjectFactory.Get<_ControlleurTableauDeBordDirEstimatif>();
         Assert.IsInstanceOfType(tbEst.modeleSuiviBornes, typeof(FactoryStructureFinanciereRendements));

         Assert.IsInstanceOfType(tbEst.modeleSuiviBornes, typeof(FactoryStructureFinanciereRendements));

         var factory = (FactoryStructureFinanciereRendements) tbEst.modeleSuiviBornes;
         Assert.IsInstanceOfType(factory.sourcePositions, typeof(SourceDonnesExtract));

      }
   }

My bind code is fuxored by the SO editor, but here it is

  class BindingModule : NinjectModule {
      public override void Load()
      {
         Bind<IFactoryModeleSuiviBornes>().To<FactoryModeleSuiviBornes>();

         Bind<IFactoryModeleSuiviBornes>().To<FactoryStructureFinanciereRendements>().WhenInjectedInto(typeof(_ControlleurTableauDeBordDirEstimatif));

         Bind<ISourceDonneesIterable>().To<SourceDonneesPositionsRendements>();

         Bind<ISourceDonneesIterable>().To<SourceDonnesExtract>();
      }
  }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不羁少年 2024-12-10 00:10:05
 Bind<ISourceDonnéesPositionsItérable>().To<SourceDonneesPositionsEstimatives>().When(
        a =>  a.ParentRequest.ParentRequest.Service.UnderlyingSystemType == typeof(ControllerTableauDeBordDirEstimatif));
 Bind<ISourceDonnéesPositionsItérable>().To<SourceDonneesPositionsEstimatives>().When(
        a =>  a.ParentRequest.ParentRequest.Service.UnderlyingSystemType == typeof(ControllerTableauDeBordDirEstimatif));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文