您可以Bind
封閉式List<X>
ToConstant()
,ToMethod()
等
但你必須以提供更多的細節,你在列表中想要什麼,或者我只是在遊資炒作是被確切地搞你想要什麼。
編輯迴應你和你的評論:如果你正在處理「未知」或鬆散的依賴關係,那麼MEF在這方面做了很多東西。
[通常與DI]如果你在內部做某事,它是一個更「已知」/固定/複雜的解決機制,你最好通過建立一個Repository或其他協調對象管理您可以根據需要請求子集和/或其他預測的列表。
[如果你有興趣在Niject具體機制]你一定是瘋了不是download the source,做的grep/FIF/SHIFT-CTRL-Q的List
雖則找出真正的故事 - 這個代碼是乾淨的整潔和測試提供的例子。
例如,可以將多個項目的界面,然後讓它們自動加入到集合你: -
namespace Ninject.Tests.Integration.EnumerableDependenciesTests {
public class WhenServiceRequestsUnconstrainedListOfDependencies
{
[Fact]
public void ServiceIsInjectedWithListOfAllAvailableDependencies()
{
kernel.Bind<IParent>().To<RequestsList>();
kernel.Bind<IChild>().To<ChildA>();
kernel.Bind<IChild>().To<ChildB>();
var parent = kernel.Get<IParent>();
VerifyInjection(parent);
}
protected override void VerifyInjection(IParent parent)
{
parent.ShouldNotBeNull();
parent.Children.ShouldNotBeNull();
parent.Children.Count.ShouldBe(2);
parent.Children[0].ShouldBeInstanceOf<ChildA>();
parent.Children[1].ShouldBeInstanceOf<ChildB>();
}
}
public class RequestsList : IParent
{
public IList<IChild> Children { get; private set; }
public RequestsList(List<IChild> children)
{
Children = children;
}
}
public interface IChild { }
public class ChildA : IChild { }
public class ChildB : IChild { }
public interface IParent
{
IList<IChild> Children { get; }
}
}
+1你給了我一個很好的起點。真正的問題比我在問題中有些複雜,我無法提出更好的樣本..我會更新問題,如果我能想到一個:) – Perpetualcoder 2010-04-22 17:08:08