Моя текущая реализация некоторого веб-приложения ASP.NET регистрирует все классы репозитория и некоторые вспомогательные классы обслуживания в моей оболочке вокруг контейнера для единства:
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 классов каждыйвремя создания контейнера.Не все классы фактически используются для каждого запроса ...
Разве это не накладные расходы, чтобы ВСЕГДА регистрировать все в контейнере?Возможно, мне не следует создавать экземпляр нового контейнера для каждого запроса (и использовать что-то вроде пула контейнеров)?
Каковы рекомендации для этого случая?
Большое спасибо.
Любые мысли приветствуются!