Я недавно переключился с структуры карты на Unity
.Все было замечательно, пока мы не добрались до производства, когда нагрузка была применена к нашему сайту, и в этот момент процессор взлетел до небес.Переключение обратно на StructureMap решает проблему с процессором, я вижу высокую загрузку процессора только тогда, когда Unity
используется в качестве контейнера IOC.
Есть идеи, что может заставить Unity
съесть столько процессора?
Ниже мой класс, который выполняет регистрацию и разрешение.Этот класс используется в общем проекте для всех проектов.
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 >();
.
.
.
}
}