我一直在試驗Unity和一個客戶Filter
/FilterProvider
。我擔心的是,這些課程從不處理。下面是一個代碼示例我開始:具有依賴注入的過濾器和FilterProvider;管理每個請求?
//FilterProvider
public class CustomFilterProvider: IFilterProvider
{
public IEnumerable<FilterInfo> GetFilters(HttpConfiguration configuration, HttpActionDescriptor actionDescriptor)
{
if (actionDescriptor.GetCustomAttributes<CustomAuthorizeAttribute>().Any())
{
var filter = UnityinstanceLocator.GetConfiguredContainer().Resolve<CustomAuthorize>();
yield return new FilterInfo(filter, FilterScope.Global);
}
}
}
//Filter
public class CustomAuthorizeFilter: IAuthorizationFilter
{
private readonly IFakeService _fakeService;
public CustomAuthorizeFilter(IFakeService fakeService)
{
_fakeService = fakeService;
}
public bool AllowMultiple { get; }
public Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken,
Func<Task<HttpResponseMessage>> continuation)
{
...Do Some stuff
}
}
//Attribute
public class CustomAuthorizeAttribute : Attribute
{
}
我IFakeService
工具IDisposable
。我將其設置爲測試。我的IFakeService
統一註冊使用HierarchicalLifetimeManager
。當它在過濾器內部時,我從不會看到它被丟棄。按照預期將IFakeService
注入控制器。
用於過濾器提供商啓動看起來像這樣(我使用OWIN):
var config = new HttpConfiguration {DependencyResolver = new UnityDependencyResolver(UnityinstanceLocator.GetConfiguredContainer())};
config.Services.Add(typeof(IFilterProvider), new ComceptFilterProvider());
我想我可以去老同學和總結我一次性類的using
聲明ExecuteAuthorizationFilterAsync
方法裏面,以免產生依賴性一起注射。如果我和Unity保持距離,是否有更好的解決方案?
如何注入一個FakeServiceFactory並使用它來創建一個FakeService - 您可以在實際使用它的使用塊中使用它。 – oerkelens