18

पर एक्शन फ़िल्टर पर निर्भरता इंजेक्शन कैसे करें मैं वास्तव में वेब एपीआई के एक्शन फ़िल्टर में निर्भरता इंजेक्शन करने के दृष्टिकोण पर फंस गया हूं। मैं इस तरह एक कार्रवाई फिल्टर है:एएसपी.नेट वेब एपीआई

public class AuthorizationAttribute : ActionFilterAttribute 
{ 
    public IApiKeyRepository Repository { get; set; } 

    private Guid GetApiKey(string customerKey) 
    { 
     return Repository.GetApiKey(customerKey); 
    } 

    public override void OnActionExecuting(HttpActionContext actionContext) 
    {   
    } 
} 

मैं (लेकिन यह कोई फर्क नहीं पड़ता जो आईओसी कंटेनर प्रयोग किया जाता है) विंडसर का उपयोग करके संपत्ति भंडार पर संपत्ति इंजेक्शन करने के लिए

मैं करने के लिए आया था चाहते हैं फ़िल्टरप्रोवाइडर को कस्टमाइज़ करें लेकिन यह मेरे लिए काम नहीं करता है, क्या किसी के पास समाधान या कोड चल रहा है? यह बहुत सराहना की जाएगी

उत्तर

1

आप इस काम को करने के लिए Ninject.Web.WebApi असेंबली (जाहिर तौर पर निनजेक्ट को आईओसी के रूप में उपयोग कर सकते हैं) का उपयोग कर सकते हैं। मैं फ़िल्टर इंजेक्शन को पूरा करने के तरीके को देखने के लिए https://github.com/ninject/Ninject.Web.WebApi के माध्यम से स्रोत और नमूना अनुप्रयोग को देखने का सुझाव दूंगा।

+0

क्या आप फ़िल्टर इंजेक्शन को पूरा करने के लिए 'Ninject.Web.WebApi' का उपयोग करने के लिए चरणों को रेखांकित कर सकते हैं? नमूना आवेदन बहुत उपयोगी नहीं है। –

+0

नमूना अनुप्रयोग में लॉगफिल्टर कैसे काम कर रहा है इसकी एक अच्छी रूपरेखा यहां दी गई है - https://github.com/ninject/Ninject.Web.WebApi/wiki/Dependency-injection-for- फ़िल्टर –

4

आपको अपने विशिष्ट आईओसी कार्यान्वयन की जांच करनी होगी। आईओसी कंटेनर जैसे एन इंजेक्ट और ऑटोफैक में सार्वजनिक गुणों को इंजेक्ट करके कुछ प्रकार के फ़िल्टर इंजेक्शन होते हैं। विंडसर मैं इस बारे में अनिश्चित हूं, लेकिन यहां एक लिंक है जो एक रैपर बनाता है जो विंडसर के साथ मदद कर सकता है: http://eagle081183.wordpress.com/2010/09/21/dependency-injection-with-asp-net-mvc-action-filters/ और विंडसर के साथ सीधे इस मुद्दे को संबोधित करने वाला एक अन्य लेख: http://weblogs.asp.net/psteele/archive/2009/11/04/using-windsor-to-inject-dependencies-into-asp-net-mvc-actionfilters.aspx

Ninject और Autofac के साथ पूर्णता के लिए:

Ninject:

Autofac:

** संपादित करें - अतिरिक्त विकल्प **

आप आईओसी कंटेनर का उपयोग कर रहे की परवाह किए बिना किसी भी फिल्टर से GlobalConfiguration.Configuration.DependencyResolver.GetService(...) ऐसा करने में सक्षम होना चाहिए।

+0

ऑटोफ़ैक के लिए +1, यह मेल खाता है अच्छी तरह से WebAPI – leon

+2

आपके उत्तर एलेक्स के लिए धन्यवाद, लेकिन आपके द्वारा दिखाए गए अधिकांश लिंक एमवीसी के लिए हैं, वेब एपीआई के लिए नहीं, यह वेब एपीआई और एमवीसी के बीच इंजेक्शन अलग-अलग है, मुझे लगता है। –

+0

मैंने इसे ऑटोफैक के साथ सफलतापूर्वक किया है लेकिन दूसरों से बात नहीं कर सकता। आपको ग्लोबल कॉन्फ़िगरेशन के माध्यम से सीधे फ़िल्टर से इच्छित सेवा तक पहुंचने में सक्षम होना चाहिए। कॉन्फ़िगरेशन। निर्भरताResolver.GetService (...)। आदर्श नहीं है, लेकिन यह काम करना चाहिए। – AlexGad

4

वेबएपीआई और AutoFac के लिए आप उपयोग कर सकते हैं:

builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration); 

प्रलेखन here है।