我正在尝试使用Unity作为解析器来创建我的Breeze Web API控制器。使用断点,似乎我的AHSEFContextProvider的构造函数只被调用一次。 Breeze每次都需要一个新实例,否则SaveChanges()方法无法正常工作。我是Unity的新手,但我认为使用TransientLifetimeManager(我认为无论如何都是默认设置)会导致每次都创建一个新实例。下面是从Global.asax Application_Start调用的UnityConfig代码。关于我哪里出错的任何想法?
var container = new UnityContainer();
container.RegisterType<AHSEFContextProvider<TaskDbContext>>(new TransientLifetimeManager(), new InjectionConstructor("ConnectionStringName"));
container.RegisterType<TaskController>(new TransientLifetimeManager(), new InjectionConstructor(container.Resolve<AHSEFContextProvider<TaskDbContext>>()));
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
答案 0 :(得分:2)
通过将[InjectionConstructor]属性添加到Breeze控制器上的构造函数,我能够正常工作。然后按如下方式更改Unity配置:
var container = new UnityContainer();
container.RegisterType<AHSEFContextProvider<TaskDbContext>>(new InjectionConstructor("ConnectionStringName"));
container.RegisterType<AHS.Apps.Task.Server.BreezeControllers.TaskController>();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);