使用Asp.Net Core 2注入存储库时的空对象

时间:2018-03-15 13:09:21

标签: c# dependency-injection asp.net-core-2.0 asp.net-core-webapi

我无法让我的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>

请问我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

你的定义有点不对劲。您需要定义IDataContext和DataContext是相关的:

rsp

现在DI知道如何创建IDataContext。现在,您只需要使用服务提供程序在使用func时创建它:

services.AddTransient<IDataContext, DataContext>();

现在,当您的服务被创建时,DI将注入您的Func&lt;&gt;