سؤال

لا يمكن الحصول على رأسي حول وفاة المعلمة في Autofac، التعليمة البرمجية التالية لا تعمل:

class Config {
    public Config(IDictionary<string, string> conf) {}
}

class Consumer {
    public Consumer(Config config) {}
}

void Main()
{
    var builder = new Autofac.Builder.ContainerBuilder();
    builder.Register<Config>();
    builder.Register<Consumer>();
    using(var container = builder.Build()){
        IDictionary<string,string> parameters = new Dictionary<string,string>();
        var consumer = container.Resolve<Consumer>(Autofac.TypedParameter.From(parameters));
    }
}

ويطرح:

DependencyResolutionException: The component 'UserQuery+Config' has no resolvable constructors. Unsuitable constructors included:
Void .ctor(System.Collections.Generic.IDictionary`2[System.String,System.String]): parameter 'conf' of type 'System.Collections.Generic.IDictionary`2[System.String,System.String]' is not resolvable.

ولكن التعليمات البرمجية التالية <م> لا العمل:

IDictionary<string,string> parameters = new Dictionary<string,string>();
var config = container.Resolve<Config>(Autofac.TypedParameter.From(parameters));
var consumer = container.Resolve<Consumer>(Autofac.TypedParameter.From(config));
هل كانت مفيدة؟

المحلول

وتكرار هنا الجواب من القائمة البريدية Autofac:

والمعلمات التي تم تمريرها إلى حل ذات الصلة فقط على المنفذ المباشر لل خدمة كنت حل، لذلك يمر المعلمات التكوين إلى عزم استدعاء وللا تعمل المستهلك. على طول الطريق حول هذه هي تغيير تسجيل المستهلك ل:

builder.Register((c, p) => new Consumer(c.Resolve<Config>(p))); 

نصائح أخرى

وAutofac تحاول الواضح لحل المعلمة من الدرجة التكوين الخاص بك في افتراض أن قاموس حد ذاته هو نوع للحل. أنا لا أعرف بناء الجملة autofac حول كيفية القيام بذلك. ولكن ربما تحتاج إلى بذل المزيد من الخطوات عند registring نوع التكوين، والبريد. ز. يعطيها مندوب الذي يمر في قاموس جديد.

ومما يؤسف له، وحاويات اللجنة الاولمبية الدولية مثل Autofac لا تأتي مجهزة "يرجى قراءة بلدي وحدة العقل".

وماذا كنت تحاول القيام به هو أساسا قائلا "أنا أعرف أحد أنواع المعنية هنا يحتاج إلى القاموس، وأنا بحاجة إلى خدمة من نوع المستهلك، يمكنك الرجاء في محاولة لمعرفة ما هو عليه أن أجازف حول ولا مجرد <م> الشيء الصحيح ؟ ".

إذا حل خدمة واحدة، وتحديد معلمة، سيتم حاول أن المعلمة لاستخدامها في تلك الخدمة. سوف الحاوية ليس محاولة لنشر تلك القيمة المعلمة وصولا الى أي تبعيات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top