C# 将对象注入到";“请求”;将范围转换为原型对象
我在Asp.NETMVC应用程序中使用Spring.Net,其中控制器必须定义为原型(非单例)。我有一些对象必须有一个请求范围(每个请求都有一个新对象)。有没有办法把它们注入我的控制器C# 将对象注入到";“请求”;将范围转换为原型对象,c#,.net,asp.net-mvc,asp.net-mvc-2,spring.net,C#,.net,Asp.net Mvc,Asp.net Mvc 2,Spring.net,我在Asp.NETMVC应用程序中使用Spring.Net,其中控制器必须定义为原型(非单例)。我有一些对象必须有一个请求范围(每个请求都有一个新对象)。有没有办法把它们注入我的控制器 <object type="xx.CompanyController, xx" singleton="false"> <property name="Service" ref="ServiceA" /> </object> <object id="S
<object type="xx.CompanyController, xx" singleton="false">
<property name="Service" ref="ServiceA" />
</object>
<object id="ServiceA" type="xx.ServiceA, xx" scope="request"/>
<property name="ObjectB" ref="ObjectB" />
</object>
<object id="ObjectB" type="xx.ObjectB, xx" scope="request"/>
像这样,除了控制器之外的所有对象都被视为单例。
ObjectB不能是原型,因为它被其他需要共享同一实例的对象引用。从控制器中删除singleton=“false”并添加scope=“request”也不起作用(控制器被视为singleton)
我将Spring.Net 1.3.1与MVCAPApplicationContext一起使用,您应该自己设置ControllerFactory
protected void Application_Start()
{
//...
ControllerBuilder.Current.SetControllerFactory(new IoCControllerFactory());
//...
}
IoCControllerFactory必须从DefaultControllerFactory继承
public class IoCControllerFactory : DefaultControllerFactory
并覆盖GetControllerInstance
protected override IController GetControllerInstance (RequestContext requestContext, Type controllerType)
{
ObjectTypeUtility.ArgumentIsNull(controllerType, "controllerType", true);
if (!typeof(IController).IsAssignableFrom(controllerType))
throw new ArgumentException(string.Format(
"Type requested is not a controller: {0}",
controllerType.Name),
"controllerType");
IController controller = IoCWorker.Resolve(controllerType)
as IController;
return controller;
}
IoCWorker是一个类,它有一个用于注入的解析方法,我使用的是Unity,我不能给IoCWorker实现——如果您需要,我可以共享
它将为您的控制器工作
祝你好运。问题不在于asp.net MVC中的IoC是否可行(我已经在Spring.net中使用了它),而在于(Spring-)对象定义的不同(Spring-)范围。我注意到了同样的行为。也就是说,如果使用请求范围定义的对象是单例对象的依赖项,那么它们将“升级”到单例范围。