असेंबली स्कैनर विधि कनेक्टइम्प्लिमेंटेशन टोटीप्स क्लोजिंग काम करने के लिए एक आईआरजीस्ट्रेशन कॉन्फ़्रेंस का उपयोग करता है। ऐसा करने के लिए मैंने एक स्कोप लेने के लिए स्ट्रक्चर मैप जेनेरिक कनेक्शन स्कैनर की प्रतिलिपि बनाई और अद्यतन किया। इसके बाद मैंने इसे संभालने के लिए वाक्य रचनात्मक चीनी के रूप में उपयोग करने के लिए एक आसान असेंबली स्कैनर एक्सटेंशन विधि बनाई।
public class GenericConnectionScannerWithScope : IRegistrationConvention
{
private readonly Type _openType;
private readonly InstanceScope _instanceScope;
public GenericConnectionScannerWithScope(Type openType, InstanceScope instanceScope)
{
_openType = openType;
_instanceScope = instanceScope;
if (!_openType.IsOpenGeneric())
{
throw new ApplicationException("This scanning convention can only be used with open generic types");
}
}
public void Process(Type type, Registry registry)
{
Type interfaceType = type.FindInterfaceThatCloses(_openType);
if (interfaceType != null)
{
registry.For(interfaceType).LifecycleIs(_instanceScope).Add(type);
}
}
}
public static class StructureMapConfigurationExtensions
{
public static void ConnectImplementationsToSingletonTypesClosing(this IAssemblyScanner assemblyScanner, Type openGenericType)
{
assemblyScanner.With(new GenericConnectionScannerWithScope(openGenericType, InstanceScope.Singleton));
}
}
यहां उचित सेटअप कोड है।
Scan(scanner =>
{
scanner.ConnectImplementationsToSingletonTypesClosing(typeof(IValidation<>));
});
उम्मीद है कि इससे मदद मिलती है।
बहुत अच्छा जोड़ा गया विशेष रुप से प्रदर्शित, 2.5.5 के लिए इंतजार नहीं कर सकता! –
वर्तमान समय के साथ लाइन में अधिक होने के लिए इसका उत्तर स्विच किया गया। –