0
我想聚集我的注入對象到一個數據對象,所以我不必有大的構造函數列表。不過,我仍然希望使用WhenInjectedInto來提供上下文綁定。如何重構ninject注入到一個更乾的形式
例如下面的規格測試,我相信這將有助於
WhenInjectedIntoRequestChain
表示只應使用綁定在源 已經注入被注入parent0其本身所具有的情景已注入父母1等
該方法應具有簽名
public static IBindingInNamedWithOrOnSyntax<T>
WhenInjectedIntoRequestChain<T>
(this IBindingWhenInNamedWithOrOnSyntax<T> @this
, params Type[] parentChain
)
用於測試該規範,這應該是
using System.Collections.Generic;
using System.Linq;
using FluentAssertions;
using Ninject;
using Weingartner.Controls.PluginFramework;
using Xunit;
namespace Weingartner.Controls.Spec.PluginFramework
{
public class NinjectExtensionsSpec
{
public interface IData { }
public class Data0 : IData {}
public class Data1 : IData {}
public class Data2 : IData {}
public class Params
{
public IList<IData> Data { get; set; }
public Params(IEnumerable<IData> data)
{
Data = data.ToList();
}
}
public class Target0
{
public Params P { get; set; }
public Target0(Params p) {P = p;}
}
public class Target1
{
public Params P { get; set; }
public Target1(Params p){P = p;}
}
[Fact]
public void WhenInjectedIntoHeirarchyShouldWork()
{
var k = new StandardKernel();
k.Bind<IData>().To<Data0>()
.WhenInjectedIntoRequestChain(typeof(Params),typeof(Target0));
k.Bind<IData>().To<Data1>()
.WhenInjectedIntoRequestChain(typeof(Params),typeof(Target1));
k.Bind<IData>().To<Data2>()
.WhenInjectedIntoRequestChain(typeof(Params),typeof(Target1));
var target0 = k.Get<Target0>();
var target1 = k.Get<Target1>();
target0.P.Data.Count.Should().Be(1);
target1.P.Data.Count.Should().Be(2);
}
}
}