mrt*_*181 3 nhibernate session dependency-injection registration simple-injector
我有这个设置:
public static void Initialize(ISessionFactory factory)
{
var container = new Container();
InitializeContainer(container, factory);
container.RegisterMvcControllers(
Assembly.GetExecutingAssembly());
container.RegisterMvcAttributeFilterProvider();
container.Verify();
DependencyResolver.SetResolver(
new SimpleInjectorDependencyResolver(container));
}
private static void InitializeContainer(
Container container, ISessionFactory factory)
{
container.RegisterPerWebRequest<ISession>(
() => factory.OpenSession(), true);
}
Run Code Online (Sandbox Code Playgroud)
Initialize方法调用于Application_Start:
public class WebApiApplication : HttpApplication
{
protected void Application_Start()
{
SimpleInjectorInitializer.Initialize(
new NHibernateHelper(
Assembly.GetCallingAssembly(),
this.Server.MapPath("/"))
.SessionFactory);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试调用控制器动作时,我得到一个ArgumentException:
类型'PositionReportApi.Controllers.PositionsController'没有默认构造函数
堆栈跟踪:
System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage请求,HttpControllerDescriptor)上的System.Web.Http.Internal.TypeActivator.Create [TBase](Type instanceType)中的System.Linq.Expressions.Expression.New(Type type) controllerDescriptor,类型controllerType)
我无法注册ISession.
如何注册工厂创建的ISession?
从堆栈跟踪中我可以看到您使用的是新的.NET 4.5 ASP.NET Web API,并且Simple Injector不在显示的调用图中.这可能意味着您尚未将Simple Injector配置为与新的Web API一起使用,这与您对MVC的需求不同(出于某些奇怪的原因,我真诚地希望他们在最终版本中解决此问题).由于您没有System.Web.Http.Dependencies.IDependencyResolver向Web API 注册Simple Injector特定实现GlobalConfiguration.Configuration.DependencyResolver,因此您将获得默认行为,该行为仅适用于默认构造函数.
看看这个Stackoverflow答案Simple Injector是否支持MVC 4 ASP.NET Web API?了解如何使用新的ASP.NET Web API配置Simple Injector.
UPDATE
请注意,即使配置DependencyResolver正确,也可以获得此异常,但是当您未注册时,请明确注册Web API控制器.这是由Web API的设计方式引起的.
始终明确注册您的控制器.
| 归档时间: |
|
| 查看次数: |
2132 次 |
| 最近记录: |