Autofac 3.0 में MultitenantIntegration समर्थन और its preview release is out होगा।एएसपी.नेट वेब एपीआई एप्लिकेशन में ऑटोफैक मल्टी-किरायेदार आईओसी कंटेनर
public class Global : System.Web.HttpApplication {
protected void Application_Start(object sender, EventArgs e) {
var config = GlobalConfiguration.Configuration;
config.Routes.MapHttpRoute("Default", "api/{controller}");
RegisterDependencies(config);
}
public void RegisterDependencies(HttpConfiguration config) {
var builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
// creates a logger instance per tenant
builder.RegisterType<LoggerService>().As<ILoggerService>().InstancePerTenant();
var mtc = new MultitenantContainer(
new RequestParameterTenantIdentificationStrategy("tenant"),
builder.Build());
config.DependencyResolver = new AutofacWebApiDependencyResolver(mtc);
}
}
यह काम किया हो जाता है और ILoggerService
किरायेदार के अनुसार एक LoggerService
उदाहरण बनाता है: इसे आज़माने के लिए, मैं निम्नलिखित विन्यास के साथ एक ASP.NET वेब API एप्लिकेशन बनाया।
- मैं बॉक्स से बाहर इस्तेमाल किया सिर्फ इस डेमो आवेदन के लिए यहाँ TenantIdentificationStrategy के रूप में प्रदान की जाती
RequestParameterTenantIdentificationStrategy
: मैं इस स्तर पर दोनों समस्याओं जो मैं हल करने में सक्षम नहीं था। मैंITenantIdentificationStrategy
इंटरफ़ेस को लागू करके अपना कस्टम TenantIdentificationStrategy बनाने में सक्षम हूं। हालांकि,TryIdentifyTenant
ITenantIdentificationStrategy
की विधि आपकोHttpContext.Current
जैसे स्थिर उदाहरण पर भरोसा करती है जो कि मैं एएसपी.NET वेब एपीआई वातावरण में नहीं चाहता हूं क्योंकि मैं चाहता हूं कि मेरा एपीआई अज्ञेयवादी हो (मुझे पता है कि मैं प्रतिनिधि हूं यह होस्टिंग परत पर काम करता है लेकिन मैं नहीं करना चाहता)। क्या इस तरीके से इसे हासिल करने का एक और तरीका है कि मैं एक स्थिर उदाहरण पर भरोसा नहीं करूंगा? मैं भी नीचे के रूप में किरायेदार विशिष्ट उदाहरण रजिस्टर करने के लिए एक मौका है:
हालांकिmtc.ConfigureTenant("tenant1", cb => cb.RegisterType<Foo>() .As<IFoo>().InstancePerApiRequest());
, मेरी स्थितियों में से एक ने मुझे आवश्यकता निर्माता पैरामीटर के माध्यम से किरायेदार नाम पारित करने के लिए और मैं नीचे की तरह कुछ है करने के लिए प्यार होता है :
mtc.ConfigureTenant((cb, tenantName) => cb.RegisterType<Foo>() .As<IFoo>() .WithParameter("tenantName", tenantName) .InstancePerApiRequest());
वर्तमान में ऐसा कोई एपीआई नहीं है। क्या यह हासिल करने का कोई और तरीका है या इस तरह की आवश्यकता का कोई मतलब नहीं है?
धन्यवाद ट्रैविस। वास्तव में सहायक आपका आखिरी नमूना वास्तव में वही है जो मैं ढूंढ रहा हूं। मुझे पहले इसके बारे में सोचना चाहिए :) तो, मेरे 'ITenantIdentificationStrategy' को वास्तव में एक स्थिर वस्तु पर होना चाहिए। फिर होस्टिंग परत में 'TenantIdentificationStrategy' को प्रतिनिधि करने के बजाय मेरे लिए कोई अन्य विकल्प नहीं है जिसमें प्रति-अनुरोध स्थिर संदर्भ है। – tugberk