我當前實現一些ASP.NET Web應用程序的註冊在我的周圍團結容器包裝的所有庫類和一些輔助服務類:統一:什麼時候註冊
public class MyUnityContainer : UnityContainer
{
public MyUnityContainer()
{
string strConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
_context = new MyDataClassesDataContext(strConnectionString);
this
.RegisterInstance(typeof(CMCoreDataClassesDataContext), _context, new ContainerControlledLifetimeManager())
;
// Register Repository classes
this
.RegisterType<IBlockedRegistrationRepository, BlockedRegistrationRepository>()
.RegisterType<ICmOptionRepository, CmOptionRepository>()
.RegisterType<ICommandExecutionLogRepository, CommandExecutionLogRepository>()
...
}
public static T GetContainer<T>(IDictionary items) where T : class, IUnityContainer, new()
{
T container;
lock (Lock)
{
if (items.Contains(UnityKey) == false)
{
container = new T();
items.Add(UnityKey, container);
}
else
{
container = items[UnityKey] as T;
}
}
return container;
}
這裏是容器如何就是一個例子實例化(我創造每每個請求的容器的新實例,但每次請求只有一個實例):
using (IUnityContainer container = MyUnityContainer.GetContainer<McaUnityContainer>(HttpContext.Current.Items))
{ ... }
一切工作正常,但什麼一件事是混淆了我很多。我現在有近50班每次創建容器時都已註冊。並非所有的類都實際用於每個請求...
是不是一個性能開銷總是註冊在容器中的一切? 也許我不應該爲每個請求實例化一個新的容器實例(並使用類似容器池的東西)?
什麼是這種情況下的最佳做法建議?
非常感謝。
歡迎任何想法!