我有一个MVC 4项目,并试图将PerWebRequest对象注入到我的控制器中。然而,它出现在对象没有被多个请求Castle Windsor 3在多个Web请求中保留了PerWebRequest对象
private static IWindsorContainer InitializeWindsor()
{
var container = new WindsorContainer().Install(FromAssembly.This());
// Add Factory facility
container.AddFacility<TypedFactoryFacility>();
// Register all controllers from this assembly
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
container.Register(
AllTypes.FromAssembly(assembly).BasedOn<Controller>().Configure(c => c.LifestyleTransient())
);
}
// Register HTTP Handlers
container.Register(Component.For<HttpRequestBase>().LifeStyle.PerWebRequest.UsingFactoryMethod(() => new HttpRequestWrapper(HttpContext.Current.Request)));
container.Register(Component.For<HttpContextBase>().LifeStyle.PerWebRequest.UsingFactoryMethod(() => new HttpContextWrapper(HttpContext.Current)));
// Register components
container.Register(Component.For<PerWebRequestObject>().LifeStyle.PerWebRequest);
}
这里是我的PerWebRequestObject重建:
public class PerWebRequestObject
{
public DateTime DateCreated { get; set; }
public PerWebRequestObject()
{
DateCreated = DateTime.UtcNow;
Debug.WriteLine("Created: " + DateCreated.ToLongTimeString());
}
}
,这里是我的TestController:
public class TestController : BaseController
{
public PerWebRequestObject pwrObject { get; set; }
public ActionResult Test()
{
Debug.WriteLine(pwrObject.DateCreated.ToLongTimeString());
return new ContentResult();
}
}
这是为什么不工作?请注意,我使用的WindsorControllerFactory和释放,像这样的控制器:
public override void ReleaseController(IController controller)
{
var disposableController = controller as IDisposable;
if (disposableController != null)
disposableController.Dispose();
_windsorContainer.Release(controller);
}
http://stackoverflow.com/questions/11643594/castle-windsor-perwebrequest-lifestyle-is- not-hon-honored – 2012-08-02 14:19:34
谢谢 - 刚试过这个,它肯定会在每次都产生一个新的请求,并创建一个新的控制器...不知道为什么我的PerWebRequestObject的行为像一个单身人士。它可能与我使用MVC4测试版相关吗? – doglobster 2012-08-07 09:04:53