我无法让我的Func成功通过。我在startup.cs中注入了webapi
services.AddDbContext<MyDataContext>(
options => options.UseSqlServer(DbGlobals.DevDatabase,
b => b.MigrationsAssembly("Services.Data.EF")));
services.AddTransient<Func<IMyDataContext>, Func<MyDataContext>>();
services.AddTransient(provider => new Func<IMyDataContext>(() => provider.GetService<IMyDataContext>()));
然后在我的控制器中我有以下内容;
private ClientService _service;
public ClientController(Func<IMyDataContext> context)
{
_service = new ClientService(context);
}
我服务的方法是;
private readonly Func<IMyDataContext> _contextFactory;
public ClientService(Func<IMyDataContext> contextFactory)
{
_contextFactory = contextFactory;
}
public void AddClient(Client model, string userName)
{
Func<Client> func = delegate
{
using (var context = _contextFactory())
{
....
}
};
return this.Execute(func);
}
现在从调试开始,如果我检查控制器注入,我可以看到Func被传入并处于服务级别2.但是当它在context = _contextFactory()的using语句中使用它时它变为null? / p>
请问我在这里做错了什么?
答案 0 :(得分:1)
你的定义有点不对劲。您需要定义IDataContext和DataContext是相关的:
rsp
现在DI知道如何创建IDataContext。现在,您只需要使用服务提供程序在使用func时创建它:
services.AddTransient<IDataContext, DataContext>();
现在,当您的服务被创建时,DI将注入您的Func&lt;&gt;