:
, :
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi2",
routeTemplate: "api2/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Unity URL- :
container.RegisterType<IAccountsService, AccountsService1>("Service1");
container.RegisterType<IAccountsService, AccountsService2>("Service2");
container.RegisterType<IAccountsService>(new InjectionFactory(c =>
{
var pathAndQuery = HttpContext.Current.Request.Url.PathAndQuery;
if(pathAndQuery.StartsWith("/api2"))
return c.Resolve<IAccountsService>("Service2");
else if(pathAndQuery.StartsWith("/api"))
return c.Resolve<IAccountsService>("Service1");
throw new Exception("Unexpected Url");
}));
UPDATE:
, Self-Hosting, HttpContext.Current null.
, IHttpControllerActivator. , HttpRequestMessage.
IHttpControllerActivator:
public class MyControllerActivator : IHttpControllerActivator
{
public IHttpController Create(
HttpRequestMessage request,
HttpControllerDescriptor controllerDescriptor,
Type controllerType)
{
if (controllerType == typeof (ValuesController))
{
var pathAndQuery = request.RequestUri.PathAndQuery;
IAccountsService svc;
if (pathAndQuery.StartsWith("/api2"))
svc = new Service2();
else if (pathAndQuery.StartsWith("/api"))
svc = new Service1();
else
throw new Exception("Unexpected Url");
return new ValuesController(svc);
}
throw new Exception("Unexpected Controller Type");
}
}
.
, DI (, , Pure DI), .
, DependencyResolver, .