我当前实现一些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班每次创建容器时都已注册。并非所有的类都实际用于每个请求...
是不是一个性能开销总是注册在容器中的一切? 也许我不应该为每个请求实例化一个新的容器实例(并使用类似容器池的东西)?
什么是这种情况下的最佳做法建议?
非常感谢。
欢迎任何想法!