كيف يمكنني الحصول على المضيف الذاتي للعمل مع اللجنة الأولمبية الدولية لاختبارات التكامل ويب أبي?

StackOverflow https://stackoverflow.com//questions/11666230

سؤال

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

ExampleClientHelper يستبدل كل الطلب / الاستجابة في المثال المرجعي المذكور أعلاه.انها تستخدم ريستشارب داخليا.

[Test]
[Ignore]
public void ValuesHelper_ShouldReturn_value1_And_value2_AsTypedObject()
{
    // IoC prep
    var builder = new ContainerBuilder();
    var container = builder.Build();

    // web server prep
    var baseUri = new Uri("http://localhost:8080");
    var config = new HttpSelfHostConfiguration(baseUri);
    config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

    // yes, the routing needs to be copied over. it's not compatible with the MVC routes
    config.Routes.MapHttpRoute("Api", "api/{controller}/{id}",
        new { id = RouteParameter.Optional, namespaces = new[] { typeof(ValuesController).Namespace } });

    // start the server and make a request
    new HttpSelfHostServer(config)
        .OpenAsync()
        .ContinueWith(task =>
            {
                var client = new ExampleClientHelper(baseUri);
                var values = client.GetValues();

                // then test the response
                Assert.AreEqual("value1", values.ElementAt(0));
                Assert.AreEqual("value2", values.ElementAt(1));
            })
        .Wait();
}

الرمز أعلاه يعمل بشكل جيد طالما أنك لا تعدل ValuesController.أي.يبقى وجود منشئ ضمني بدون معلمات.

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

{"نوع الاستثناء":"النظام.أرغمنتكسيبتيون" ، "رسالة": "نوع 'تضمين.(إيكسابي).ريستسيرفر.تحكم.فالويسكونترولر "ليس لديه منشئ افتراضي" ، "ستاكتريس": "في النظام.لينق.التعبيرات.التعبير.جديد (نوع نوع) \ ص \ ن في النظام.الويب.المتشعب.داخلي.اكتبمنشط.إنشاء [تباس] (نوع إنستانسيتيب)\ص\ن في النظام.الويب.المتشعب.المرسل.ديفولثتبكونترولراكتيفاتور.إنشاء (طلب هتبركستمساج ، هتبكونترولرديسكريبتور كونترولرديسكريبتور ، نوع كونترولرتيب)"}

من الواضح أن الخادم المضيف الذاتي يحاول إنشاء ValuesController لكنها لا تستطيع.لم؟ظننت أنني السلكية حتى ديبندنسيريسولفر بشكل صحيح.أتوقع الحصول على استثناء تلقائي بدلا من ذلك يشكو من تبعيتي التي لم أقم بتكوينها.

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

المحلول

يبدو أنك نسيت تسجيل وحدة التحكم مع الحاوية وتحاول واجهة برمجة تطبيقات الويب إنشاء المثيل لك.

var builder = new ContainerBuilder();

// Register API controllers using assembly scanning.
builder.RegisterApiControllers(typeof(ValuesController).Assembly);

var container = builder.Build();

يمكنك أيضا تسجيل وحدة التحكم الفردية إذا لزم الأمر.

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