我最近从结构图切换为Unity
。直到我们投入生产时,所有负载都是桃花心木,这时CPU猛增。切换回StructureMap可解决CPU问题,只有将Unity
用作IOC容器时,才能看到较高的CPU使用率。
有什么主意会导致Unity
消耗太多CPU?
下面是我的课程,负责注册和解决。在所有项目中的一个公共项目中共享此类。
namespace Common.Containers
{
public static class UnityIoc
{
private static IUnityContainer _container;
static Init();
private UnityIoc()
{
_container = new UnityContainer();
_container.AddNewExtension<Interception>();
{
public static void Register<TInterface, TImplementation>()
{
if(!_container.IsRegistered<TInterface>())
{
_container.RegisterType(typeof(TInterface),
typeof(TImplementation));
try
{
_container.Configure<Interception>()
.SetInterceptorFor(typeof(TImplementation), new
VirtualMethodInterceptor());
}
catch (Exception e)
{
Logger.Debug($"Unable to add interception see exception:
{e.Message}");
}
}
}
public static object Resolve(Type type)
{
return _container.Resolve(type);
}
}
}
下面是我在Global.asx.cs中拥有的示例
protected override void Application_Start(object sender, EventArgs e)
{
Web.RegisterTypes();
Service.RegisterTypes();
Data.RegisterTypes();
}
Server and Data are both Class Libraries.
这是注册类的示例。
public static class Web
{
public static void RegisterTypes()
{
UnityIoc.Register<ISomeInterface, SomeConcreteImplementation >();
.
.
.
}
}
public static class Service
{
public static void RegisterTypes()
{
UnityIoc.Register<ISomeServiceInterface,
SomeServiceConcreteImplementation >();
.
.
.
}
}
public static class Data
{
public static void RegisterTypes()
{
UnityIoc.Register<ISomeRepInterface,
SomeRepoConcreteImplementation >();
.
.
.
}
}