2011-11-10 41 views
0

我創建了一個ILinkExtractor爲例說明如下:用Ninject 2定義實例AppDomain?

void myMethod() { 
    AppDomain webDomain = createWebProtectedAppDomain(); 
    ObjectHandle linkExtractorObj = webDomain.CreateInstanceFrom(assemblyPath, typeof(LinkExtractor).FullName); 
    ILinkExtractor linkExtractor = (ILinkExtractor)linkExtractorObj.Unwrap(); 
    // use it... 
    // ... 
    // then release the appdomain... 
    AppDomain.Unload(webDomain); 
} 

我想用這個代替,隱藏所有的AppDomain的複雜性:

void myMethod() { 
    ILinkExtractor linkExtractor = kernel.Get<ILinkExtractor>(); 
    // use it... 
    // ... 
    // then release (transparently) the appdomain... 
} 

換句話說,我想使用ninject 2將AppDomain信息打包到我的實例以限制它用於網絡使用,但此行爲應該被調用者隱藏。

使用或擴展ninject 2可以實現這種行爲嗎?

謝謝!

回答

0

我會創建一個ILinkExtractorManager,實現IDisposable來管理ILinkExtractor的生存期。然後使用using子句:

using(ILinkExtractorManager manager = kernel.Get<ILinkExtractorManager>()) 
{ 
    ILinkExtractor extractor = manager.GetExtractor(); 

    // usage of extractor 

} 

當使用端的Dispose()將被在其上可以卸載此時的應用程序域管理器調用。