如何使用 Unity Container for Web API 根据请求注入一个类型的实例
How to inject an instance of a type, per request using Unity Container for Web API
public class StoreDetails
{
public int StoreId { get; set; }
}
我想为每个 Web 请求创建一个 StoreDetails 实例 API。此实例将用作项目中各种其他 类 的依赖项。
我还想将 "StoreId" 属性 的值设置为 HttpContext.Current.Request.Headers["StoreId"]
我在以下库的帮助下使用 Unity 作为容器:
团结 3.5.1404.0
Unity.AspNet.WebApi 3.5.1404.0
我有以下方法来注册类型
public static void RegisterTypes(IUnityContainer container)
{
container.RegisterInstance<StoreDetails>(/* how to provide some method to inject required StoreId from HttpContext.Current.Request.Headers["StoreId"] per request */);
}
我自己想出了如何做到这一点。
public static void RegisterTypes(IUnityContainer container)
{
// Some other types registration .
container.RegisterType<StoreDetails>(
//new PerResolveLifetimeManager(),
new InjectionFactory(c => {
int storeId;
if(int.TryParse(HttpContext.Current.Request.Headers["StoreId"], out storeId)) {
return new StoreDetails {StoreId = storeId};
}
return null;
}));
}
public class StoreDetails
{
public int StoreId { get; set; }
}
我想为每个 Web 请求创建一个 StoreDetails 实例 API。此实例将用作项目中各种其他 类 的依赖项。
我还想将 "StoreId" 属性 的值设置为 HttpContext.Current.Request.Headers["StoreId"]
我在以下库的帮助下使用 Unity 作为容器: 团结 3.5.1404.0 Unity.AspNet.WebApi 3.5.1404.0
我有以下方法来注册类型
public static void RegisterTypes(IUnityContainer container)
{
container.RegisterInstance<StoreDetails>(/* how to provide some method to inject required StoreId from HttpContext.Current.Request.Headers["StoreId"] per request */);
}
我自己想出了如何做到这一点。
public static void RegisterTypes(IUnityContainer container)
{
// Some other types registration .
container.RegisterType<StoreDetails>(
//new PerResolveLifetimeManager(),
new InjectionFactory(c => {
int storeId;
if(int.TryParse(HttpContext.Current.Request.Headers["StoreId"], out storeId)) {
return new StoreDetails {StoreId = storeId};
}
return null;
}));
}