我正在关注我的Web API和AngularJS项目的Onion架构。在Infrastructure.DependencyResolution部分中,我使用的是Simple Injector。这是我的代码:
[assembly: PreApplicationStartMethod(typeof(IocConfig), "RegisterDependencies")]
namespace Infrastructure.DependencyResolution
{
public class IocConfig
{
private static Container _container;
public static void RegisterDependencies()
{
_container = new Container();
_container.Verify();
_container.RegisterWebApiRequest<IEntitiesContext>(() =>
{
return new MyContext();
});
_container.RegisterWebApiRequest<IUserRepository, UserRepository>();
_container.RegisterWebApiRequest<IAccountService, AccountService>();
_container.RegisterWebApiRequest<IUnitOfWork, UnitOfWork>();
}
}
}
现在如果我尝试将url转到我的帐户控制器,我收到此错误:
尝试创建类型的控制器时发生错误 &#39;的AccountController&#39 ;.确保控制器具有无参数 公共建设者。
我搜索并发现Simple Injector有一些不同的Web Api代码,正如他们site所建议的那样:
// This is an extension method from the integration package.
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
我也复制了它,但它不接受GlobalConfiguration.Configuration,我想因为我在库项目中使用它。
当我在RegisterDependencies
方法中设置断点时,Visual Studio不会在断点处停止。
有人能告诉我去哪儿路吗?
答案 0 :(得分:5)
您遗失的是SimpleInjectorWebApiDependencyResolver
中所述GlobalConfiguration.Configuration.DependencyResolver =
new SimpleInjectorWebApiDependencyResolver(container);
的注册:
IDependencyResolver
如果不重写Web API的默认IDependencyResolver
,Web API将只是尝试实例化控制器实例,这要求控制器类型具有默认构造函数。通过将SimpleInjectorWebApiDependencyResolver
替换为NSData *data = UIImageJPEGRepresentation(imageView.image, 0.6);
请求,控制器实例将被转发到Simple Injector容器。
使用Web API integration guide时,您将取得最大的成功。这将引导您的应用程序,并允许您快速入门。
答案 1 :(得分:1)
我之前一直处于同样的境地。您可以在我的类似问题here
中找到解决方案