OWIN和Global.asax.cs文件

时间:2015-07-22 06:42:45

标签: c# asp.net owin global-asax simple-injector

我在我的项目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);
        }
....

1 个答案:

答案 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

Dependency Injection in ASP.NET Web API 2