2
是否可以在不註冊容器的情況下解析autofac中的服務?在不註冊服務類型的情況下解析autofac中的服務
到目前爲止,我想出了這樣的事情:
public object ResolveUnknownService(IContainer container, Type serviceType)
{
ILifetimeScope lifetimeScope = container.BeginLifetimeScope(b => b.RegisterType(serviceType).ExternallyOwned());
try
{
return lifetimeScope.Resolve(serviceType);
}
finally
{
lifetimeScope.Dispose();
}
}
它的工作原理,但我有點擔心的表現。我也不想使用AnyConcreteTypeNotAlreadyRegisteredSource,因爲我想具體說明我想要(或不想)以這種方式解決哪些服務。
在我例如,我在註冊結束時使用了ExternallyOwned,所以我認爲組件應該在臨時生命週期範圍處理後生存。 – tomazv 2010-11-16 07:35:30
主要場景是我們的應用程序中的插件系統。插件可以通過構造函數注入它們的依賴關係,並且只有在解析時才知道一些依賴關係。我們用對象/插件工廠中的輸入參數來包裝Autofac。 API用法如下所示:objectFactory.New(typeof(MyPlugin))。WithParameter(typeof(MyDependency),myDependencyValue).Build()。這會創建MyPlugin的新實例。類型MyDependency可能在構造函數中,也可能不在構造函數中,也可能有其他依賴項已經被Autofac註冊。 – tomazv 2010-11-16 08:13:27
如果組件具有一次性依賴關係,則無論是否使用「ExternallyOwned()」,這些依賴關係都將被處置。解決並維持一個「擁有的」對你來說可能是更好的選擇。您可能還會對MEF(和Autofac)可以結合IEnumerable 和Lazy 處理插件選擇場景的方式感興趣 - http://mef.codeplex.com/wikipage?title=Exports %20於是%20Metadata –
2010-11-18 09:00:43