架构中两个深度的上下文绑定
考虑以下集成测试。我想找到一种方法使最后一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)