У меня есть вопрос к Ioc-гуру.Я работаю с коллегой, чтобы сосредоточиться на замке Виндзор IoC.У нас есть разногласия по поводу статических объектов доменной службы в веб-формах asp.Net.У нас есть статическая фабрика BLServiceFactory на нашем уровне инфраструктуры, которая извлекает контейнер.
public sealed class BLServiceFactory
{
private static BLServiceFactory _instance = new BLServiceFactory();
IWindsorContainer _container = new WindsorContainer();
public static BLServiceFactory Instance
{
get
{return _instance;}
}
public T Create<T>()
{
return (T)_container[typeof(T)];
}
private BLServiceFactory()
{
_container.AddComponent("DataContext", typeof(DAL.DataContextFactory), typeof(DAL.CPContextFactory));
_container.AddComponent("Repository", typeof(DAL.IRepository<>), typeof(DAL.Repository<>));
_container.AddComponent("UserManager", typeof(BL.IUserManager), typeof(BL.UserManager));
_container.AddComponent("RoleService", typeof(BL.IRoleService), typeof(BL.RoleService));
}
}
Мы извлекаем экземпляры с фабрики из нашего кода, как это.
public partial class PrintList : System.Web.UI.Page
{
private static readonly ISchoolManager _schoolService = BLServiceFactory.Instance.Create<ISchoolManager>();
Models.TechSchool _tech;
protected void Page_Load(object sender, EventArgs e)
{
_tech = _schoolService.GetSchoolForTechPrep(Profile.UserName);
}
protected void DoOtherStuff...
{
_schoolService.Foo(_tech);
}
}
Мне кажется, что мы будем обслуживать один и тот же экземпляр для каждого сеанса.Это было бы действительно плохо!Мой коллега считает, что, поскольку все наши доменные службы помечены как временные, каждый запрос к странице получает новый экземпляр.
Я также читал немного об утечках памяти из-за объектов, помеченных как временные, которые не были освобождены для сбора мусора.,Было ли это исправлено в последней версии Castle Windsor, или я должен явно выпускать объекты?Конечно, в нынешнем виде все объекты статичны, и это не имеет значения.