سؤال

أنا أستخدم Autofac 2.1.12 للتعامل مع حقن التبعية ، وأواجه مشكلة مع مشكلة واحدة محددة. لا يمكنني حل التبعية NameValueCollection.

النظر في مقتطف الرمز التالي:

class Foo
{
    public Foo(NameValueCollection collection) { }
}

static class Run
{
    public static void Main()
    {
        var builder = new ContainerBuilder();
        builder.RegisterType<NameValueCollection>();
        builder.RegisterType<Foo>();

        using (var scope = builder.Build())
            scope.Resolve<Foo>();
    }
}

سوف تعطل مع dependencesrolutionexception غير المعلنة:

تم اكتشاف تبعية المكون الدائري: foo -> system.collections.specialized.namevalueCollection -> system.collections.specialized.namevaluecollection.

ومع ذلك ، إذا استبدلت NameValUeCollection بأي نوع آخر ، فإن الرمز يعمل بشكل جيد.

هل أفعل شيئًا ما ، هل هناك شيء مميز حول نوع NameValueCollection الذي أفتقده ، أم أن هذه مشكلة في Autofac نفسها؟

هل كانت مفيدة؟

المحلول

هذا حسب التصميم. نرى التلقائي:

يختار AutoFAC تلقائيًا المُنشئ مع معظم المعلمات التي يمكن الحصول عليها من الحاوية.

حاول التسجيل NameValueCollection مثل ذلك (لست متأكدًا مما إذا كان هذا سيعمل ، رغم ذلك):

builder.RegisterType<NameValueCollection>().UsingConstructor();

إذا لم ينجح ذلك ، فحاول

builder.Register(c => new NameValueCollection());
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top