在檢查了SO上的所有類似問題后,我的問題仍然存在,所以我為它開了一個新問題。
我有一個單元測驗,它參考了另一個專案,其中包含一個MVC 4 ApiController,它有一個用于依賴注入的建構式。
public class DataController : ApiController
{
public DataController(IRepository repository){}。
在我的測驗中,我使用了Microsoft.Extensions.DependencyInjection,并有如下設定:
//注意:這種多余的型別訪問對于從不同的程式集加載控制器是必要的,
//見 https://stackoverflow.com/a/11758025/1468097
var type = typeof(DataController)。
var services = new ServiceCollection().AddSingleton<IRepository>(new ImMemoryRepository()) 。
var httpConfiguration = new HttpConfiguration
{
DependencyResolver = new DependencyResolver(services.BuildServiceProvider() )。
IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always
};
httpConfiguration.Routes.MapHttpRoute("Default", "{controller}/{action}")。)
httpConfiguration.DependencyResolver = new DependencyResolver(services.BuildServiceProvider() )。
var httpServer = new HttpServer(httpConfiguration)。
var client = new HttpClient(httpServer)。
var response = await client.GetAsync("http://whatever/data/getdata?id=000"/span>);
而且我有一個相當原始的依賴性決議器的實作,作為測驗類中的嵌套私有類:
private class DependencyResolver : IDependencyResolver
{
private readonly ServiceProvider _serviceProvider;
public DependencyResolver(ServiceProvider serviceProvider) => _serviceProvider = serviceProvider。
public void Dispose()/span> => _serviceProvider.Dispose()。
public object GetService(Type serviceType)/span> => _serviceProvider. GetService(serviceType)。
public IEnumerable<object> GetServices(Type serviceType) => _serviceProvider. GetServices(serviceType)。
public IDependencyScope BeginScope() => new Scope(_serviceProvider. CreateScope())。
private class Scope : IDependencyScope
{
private readonly IServiceScope _scope;
public Scope(IServiceScope scope) => _scope = scope;
public void Dispose()/span> => _scope.Dispose()。
public object GetService(Type serviceType) => _scope. ServiceProvider.GetService(serviceType)。
public IEnumerable<object> GetServices(Type serviceType) => _scope. ServiceProvider.GetServices(serviceType)。
}
}
我從測驗中得到的回應是一個500的服務器錯誤說
型別'Mvc.DataController'沒有默認建構式
似乎我正在做所有其他人在MVC 4中做的依賴注入作業,甚至對于這個癥狀非常相似的問題也是如此。
我是否錯過了一些明顯的東西?
我是否錯過了一些明顯的東西?
Update
。我已經嘗試了NinjectResolver,結果是同樣的問題:
var kernel = new StandardKernel()。
kernel.Bind<IRepository>().ToConstant(new InMemoryRepository())。
var httpConfiguration = new HttpConfiguration
{
DependencyResolver = new NinjectResolver(kernel)
};
uj5u.com熱心網友回復:
我想明白了。
關鍵是你還需要在你的依賴性配置中添加你要打的控制器。
在我的案例中,我只需要添加:
var services = newServiceCollection();
// This is what was missing.
services.AddTransient<DataController>()。
取自這里(雖然我根本沒有使用OWIN)。如何將Microsoft.Extensions.DependencyInjection添加到OWIN自托管WebApi中
另一個使用Autofac的例子:
var builder = new ContainerBuilder()。
//你需要注冊包含你的控制器的裝配。
builder.RegisterApiControllers(typeof(DataController).Assembly)。
取自這里。依賴注入在Owin自我托管的Web Api 2和Autofac中不起作用
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/319212.html
標籤:
上一篇:Lambda無法檢測到該層
