Wenn ich so etwas wie dieses:Initialisieren eine Liste in DryIoc
var container = new Container();
container.RegisterInstance("a", serviceKey: "a");
container.RegisterInstance("b", serviceKey: "b");
Wie melde ich eine Liste der Zeichenfolge, die „a“ und „b“ enthalten?
Ich habe auch versucht, Params, aber mit keinem Erfolg.
class T
{
public string[] x;
public T(string s, params string[] strs)
{
x = (new[] {s}).Union(strs).ToArray();
}
}
static void Main(string[] args)
{
var container = new Container();
container.RegisterInstance("a", serviceKey: "a");
container.RegisterInstance("b", serviceKey: "b");
container.Register<T>(made: Made.Of(() => new T(Arg.Of<string>("a"))));
container.Register<T>(made: Made.Of(() => new T(Arg.Of<string>("a"), Arg.Of<string>("b"))));
EDIT:
ich es geschafft, diese am Laufen zu haben, aber es könnte nicht eine gute workarround sein:
container.RegisterInstance(typeof(IEntityManager), (IEntityManager)ctx.GetObject("entityManager_candidate"), serviceKey: "candidate");
container.RegisterInstance("XYZ_CANDIDATE", serviceKey: "candidate");
container.Register<IDalCandidate>(serviceKey: "candidate",
made: Made.Of(() => new DalCandidate(Arg.Of<IEntityManager>("candidate"), Arg.Of<string>("candidate"))));
container.RegisterInstance(typeof(IEntityManager), (IEntityManager)ctx.GetObject("entityManager_resource"), serviceKey: "resource");
container.RegisterInstance("XYZ_RESOURCE", serviceKey: "resource");
container.Register<IDalCandidate>(serviceKey: "resource",
made: Made.Of(() => new DalCandidate(Arg.Of<IEntityManager>("resource"), Arg.Of<string>("resource"))));
//container.RegisterMapping<IDalCandidate, DalCandidate>()
var lst = new List<IDalCandidate>
{
container.Resolve<IDalCandidate>("resource"),
container.Resolve<IDalCandidate>("candidate")
};
container.RegisterInstance(typeof(IList<IDalCandidate>), lst);
container.Register<ISearchWeightedCandidateManager, SearchWeightedCandidateManager>();
Ich bin mir nicht sicher, was Sie erreichen möchten. Sie können String-Werte mit String-Schlüsseln als KeyValuePair [] einfügen, dann können Sie normales Linq verwenden. Wenn Sie alle Arten von Dienstschlüsseln benötigen, verwenden Sie KeyValuePair []. Mehr Infos hier https://bitbucket.org/dadhi/dryioc/wiki/RegisterResolve#markdown-header-resolving-as-keyvaluepair-wrapper –
dadhi
Ich brauche eine Liste von in einige Konstruktoren injizieren (SearchWeightedCandidateManager erfordert eine IList von IDalCandidate). –
Dann injizieren Sie eine Liste, was ist das Problem? DryIoc unterstützt IList Wrapper. –
dadhi