我正在使用Owin,Web API,实体框架,ASP.NET身份创建API.我使用Simple Injector作为我选择的DI框架.
在Owin启动过程中,我想用一些示例数据为我的数据库设定种子.这由一个实现类处理IDatabaseInitializer,看起来像这样:
public class MyDbInitializer : DropCreateDatabaseAlways<MyDataContext>
{
private readonly IUserManager _userManager;
public MyDbInitializer(IUserManager userManager)
{
_userManager = userManager;
}
protected override void Seed(MyDataContext context)
{
SeedIdentities();
}
private void SeedIdentities()
{
var user = new User
{
UserName = "someUsername",
Email = "some@email.com"
};
_userManager.CreateAsync(user, "Password");
}
Run Code Online (Sandbox Code Playgroud)
IUserManager是ASP.NET Identiy UserManager类的代理,它间接依赖于IUnitOfWork.如果你想知道,IUserManager注册如下:
container.Register(typeof(IUserManager),
() => container.GetInstance<IUserManagerFactory>().Create());
Run Code Online (Sandbox Code Playgroud)
因为我想根据Web API请求使用单个工作单元,所以我已经注册了IUnitOfWork以下内容:
container.RegisterWebApiRequest<IUnitOfWork, MyUnitOfWork>();
Run Code Online (Sandbox Code Playgroud)
除了解析类中的IUserManager依赖项之外,这对于所有事情都很好MyDbInitializer.在应用程序启动期间,SimpleInjector失败并出现以下ActivationException:
SimpleInjector.ActivationException was …Run Code Online (Sandbox Code Playgroud) c# dependency-injection simple-injector asp.net-web-api owin