मैं उन वस्तुओं में मौजूदा प्रिंसिपल को इंजेक्ट करने के लिए ऑटोफ़ैक का उपयोग करना चाहता हूं। मान लीजिए मेरे पास एक ऑब्जेक्ट है (AuthorizationValidator
) जो सुरक्षा जांच कर रहा है। अपने वेब आवेदन AuthorizationValidator पंजीकृत किया गया है के लिएऑटोफ़ैक: NULL मानों को इंजेक्ट करें
public AuthorizationValidator : IAuthorizationValidator
{
public AuthorizationValidator(IDataAccess dataAccess, IPrincipal principal)
{
// Save injected objects
...
}
public bool CheckPermission(Guid objectId, Action action)
{
// Check if we are authorized at all
if (this.principal == null)
return false;
// Check the permission in the database
...
}
}
और मैं निम्नलिखित पंजीकरण का उपयोग प्रिंसिपल सुई:: यह कुछ इस तरह दिखता धागा के प्रमुख या कुछ इसी तरह
builder.Register<IPrincipal>((c, p) => HttpContext.Current?.User);
आवेदनों की अन्य प्रकार का उपयोग करें । प्रिंसिपल की आवश्यकता वाले सभी ऑब्जेक्ट को उचित प्रिंसिपल इंजेक्शन मिलता है।
यदि कोई कॉल प्राधिकरण के बिना किया जाता है, तो ऑटोफैक मुझे एक अपवाद उठाता है कि यह IPrincipal
ऑब्जेक्ट प्रदान नहीं कर सकता है, क्योंकि कारखाना null
लौटाया गया है। इस मामले में, एक खाली प्रिंसिपल ठीक है और अपवाद नहीं उठाया जाना चाहिए। ASP.NET अनुप्रयोग मैं IPrincipalFactory के रूप में निम्नलिखित वस्तु रजिस्टर होगा के लिए
public AuthorizationValidator : IAuthorizationValidator
{
public AuthorizationValidator(IDataAccess dataAccess, IPrincipalFactory principalFactory)
{
// Save injected objects
_dataAccess = dataAccess;
_principal = principalFactory.GetCurrentPrincipal();
}
public bool CheckPermission(Guid objectId, Action action)
{
// Same as previous example
...
}
}
public interface IPrincipalFactory
{
IPrincipal GetCurrentPrincipal();
}
:
मुझे नहीं पता कि ऑटोफैक के अंदर क्या है, लेकिन यह एक मौका है कि यह काम कर सकता है: 'बिल्डर। रजिस्ट्रार ((सी, पी) => (आईपीआर प्रिंसिपल) एचटीपी कोंटेक्स्ट.कुरेंट? यूसर); ' –
आम तौर पर बोलते हुए, आईओसी ढांचे आपको जानबूझकर शून्य से इंजेक्ट नहीं करने देंगे। यह सिर्फ एक ऑटोफैक चीज नहीं है। –
क्या [नल ऑब्जेक्ट पैटर्न] (https://en.wikipedia.org/wiki/Null_Object_pattern) एक विकल्प होगा जैसा मैंने अपने उत्तर में सुझाया है? – fknx