ServiceStack 和 SimpleInjector 一起使用抵制 API 服务
Using ServiceStack and SimpleInjector together to resister API service
我们正在尝试将 ServiceStack 与我们的 ASP.NET MVC 5
应用程序一起使用。
因此最终用户将使用充分利用 ASP.NET MVC
的 Web 应用程序。
我们想发布一套API的,以便我们的旧系统可以与新系统通信。
新系统利用 SimpleInjector
IoC
将整个应用程序粘合在一起。
我已经安装了 ServiceStack.Mvc
但无法运行。
我试着按照这个 link: https://github.com/ServiceStack/ServiceStack/wiki/Mvc-integration
我认为这是因为 ServiceStack
有自己内置的 IoC
与 SimpleInjector
.
冲突
这是我的 Application_Start
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Bootstrap.Configure();
#region Initialize SimpleInjector
var container = new Container();
InitializeContainer(container);
container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
container.RegisterMvcIntegratedFilterProvider();
container.Verify();
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
#endregion
new AppHost().Init();
}
这是我的 AppHost
public class AppHost : AppHostBase
{
public AppHost() : base("MVC 5", typeof(MyServices).Assembly) { }
public override void Configure(Container container)
{
SetConfig(new HostConfig
{
HandlerFactoryPath = "api",
});
// ControllerBuilder.Current.SetControllerFactory(
// new FunqControllerFactory(container));
}
}
[ServiceStack.Route("/hello/{Name}")]
public class Hello
{
public string Name { get; set; }
}
public class MyServices : Service
{
public object Any(Hello request)
{
return request;
}
}
我做错了什么?当我转到 website.com/api
时,我只看到 404 资源未找到页面。
如果可以,我想继续使用SimpleInjector
,可以吗?或者我需要在整个应用程序中采用 ServiceStack
IoC
吗?
该应用程序遵循 Onion Architecture
,它分离了很多问题,这就是我们使用 SimpleInjector
的原因,我们经常使用它的 Packaging
功能。
任何帮助将不胜感激。
更新: 经过更多的研究,我发现可以编写一个适配器,如此 link 解释:https://github.com/ServiceStack/ServiceStack/wiki/The-IoC-container 但没有示例SimpleInjector
实施,有人可以帮忙吗?
Simple Injector 的适配器如下所示:
public class SimpleInjectorServiceStackAdapter : IContainerAdapter
{
private readonly Container container;
public SimpleInjectorServiceStackAdapter(Container container) {
this.container = container;
}
public T Resolve<T>() {
return (T)this.container.GetInstance(typeof(T));
}
public T TryResolve<T>() {
var registration = this.container.GetRegistration(typeof(T));
return registration == null ? default(T) : (T)registration.GetInstance();
}
}
我们正在尝试将 ServiceStack 与我们的 ASP.NET MVC 5
应用程序一起使用。
因此最终用户将使用充分利用 ASP.NET MVC
的 Web 应用程序。
我们想发布一套API的,以便我们的旧系统可以与新系统通信。
新系统利用 SimpleInjector
IoC
将整个应用程序粘合在一起。
我已经安装了 ServiceStack.Mvc
但无法运行。
我试着按照这个 link: https://github.com/ServiceStack/ServiceStack/wiki/Mvc-integration
我认为这是因为 ServiceStack
有自己内置的 IoC
与 SimpleInjector
.
这是我的 Application_Start
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Bootstrap.Configure();
#region Initialize SimpleInjector
var container = new Container();
InitializeContainer(container);
container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
container.RegisterMvcIntegratedFilterProvider();
container.Verify();
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
#endregion
new AppHost().Init();
}
这是我的 AppHost
public class AppHost : AppHostBase
{
public AppHost() : base("MVC 5", typeof(MyServices).Assembly) { }
public override void Configure(Container container)
{
SetConfig(new HostConfig
{
HandlerFactoryPath = "api",
});
// ControllerBuilder.Current.SetControllerFactory(
// new FunqControllerFactory(container));
}
}
[ServiceStack.Route("/hello/{Name}")]
public class Hello
{
public string Name { get; set; }
}
public class MyServices : Service
{
public object Any(Hello request)
{
return request;
}
}
我做错了什么?当我转到 website.com/api
时,我只看到 404 资源未找到页面。
如果可以,我想继续使用SimpleInjector
,可以吗?或者我需要在整个应用程序中采用 ServiceStack
IoC
吗?
该应用程序遵循 Onion Architecture
,它分离了很多问题,这就是我们使用 SimpleInjector
的原因,我们经常使用它的 Packaging
功能。
任何帮助将不胜感激。
更新: 经过更多的研究,我发现可以编写一个适配器,如此 link 解释:https://github.com/ServiceStack/ServiceStack/wiki/The-IoC-container 但没有示例SimpleInjector
实施,有人可以帮忙吗?
Simple Injector 的适配器如下所示:
public class SimpleInjectorServiceStackAdapter : IContainerAdapter
{
private readonly Container container;
public SimpleInjectorServiceStackAdapter(Container container) {
this.container = container;
}
public T Resolve<T>() {
return (T)this.container.GetInstance(typeof(T));
}
public T TryResolve<T>() {
var registration = this.container.GetRegistration(typeof(T));
return registration == null ? default(T) : (T)registration.GetInstance();
}
}