我在我的项目Owin和Katana中使用OAuth授权。并且所有工作都很好但在global.asax.cs文件中我有一些IOC容器的代码:
Bootstrapper.IncludingOnly.Assembly(Assembly.Load("Dashboard.Rest")).With.SimpleInjector().With.ServiceLocator().Start();
Container container = Bootstrapper.Container as Container;
GlobalConfiguration.Configuration.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container);
我在 Startup.cs 文件中添加了此代码,但之后我抓住了下一个异常:
类型的例外 ' Bootstrap.Extensions.Containers.NoContainerException'发生在 Bootstrapper.dll但未在用户代码中处理
其他信息:无法继续。容器还没有 初始化。
如果我打电话给某人api方法,我会抓住下一个例外:
无法继续。容器尚未初始化。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息: Bootstrap.Extensions.Containers.NoContainerException:无法执行 继续。容器尚未初始化。
来源错误:
第21行:public Startup()第22行:{第23行:第 Bootstrapper.IncludingOnly.Assembly(Assembly.Load(" Dashboard.Rest&#34))。With.SimpleInjector()With.ServiceLocator()启动()。; 第24行:容器容器= Bootstrapper.Container as 容器;第25行:
GlobalConfiguration.Configuration.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(容器);
我不知道如何修复它。请帮帮我。感谢。
更新 我有一些SimpleInjectorRegisterTypes类用于连接我的接口和服务:
public class SimpleInjectorRegisterTypes : ISimpleInjectorRegistration
{
public void Register(Container container)
container.RegisterSingle<IApplication, ApplicationService>();
}
}
我为API编写逻辑服务。
在我的控制器中,我使用帮助接口创建构造函数来调用我的方法:
public class ApplicationController : ApiController
{
private readonly IApplication _application;
public ApplicationController(IApplication application)
{
_application = application;
}
[HttpGet]
public IHttpActionResult GetAllApps()
{
var apps = _application.GetAllApps();
return apps == null ? (IHttpActionResult)Ok(new Application()) : Ok(apps);
}
....
答案 0 :(得分:1)
我解决了这个问题。我只是使用其他IOC容器Unity
以下是包装Unity容器的IDependencyResolver的实现。
public static void Register(HttpConfiguration config)
{
var container = new UnityContainer();
container.RegisterType<IProductRepository, ProductRepository>(new HierarchicalLifetimeManager());
config.DependencyResolver = new UnityResolver(container);
// Other Web API configuration not shown.
}
<强> WebApiConfig.cs 强>
public class ProductsController : ApiController
{
private IProductRepository _repository;
public ProductsController(IProductRepository repository)
{
_repository = repository;
}
// Other controller methods not shown.
}
一些使用IoC容器的控制器:
border-image