我尝试将我的一个API项目分成三个不同的层。
API正在使用Asp.net Identity 2.0和我安装的示例中的代码,足以使用OAuth授权。
然而,当我进行这种分离时,有时我会收到一个错误,告诉我需要从第一层引用第三层(实体)。我无法弄清楚原因。这会破坏分离的整个目的,对吗?
例如,当我尝试替换此行时(来自Startup.Auth.cs中的API层,ConfigureAuth方法)
app.CreatePerOwinContext(ApplicationDbContext.Create);
使用
app.CreatePerOwinContext(uow.CreateDbContext())
返回ApplicationDbContext的新实例的方法。
我希望从我的第二层返回上下文,其中我的UnitOfWork(从数据层获取ApplicationDbContext)。
有人可以解释一下这是如何运作的吗?
答案 0 :(得分:0)
要解决您的问题,您需要开始使用Interfaces和任何DI框架。如果您想开始使用AutoFac(https://code.google.com/p/autofac/wiki/WebApiIntegration),我可以在这里为您提供代码。
当您通过Nuget将AutoFac安装到您的解决方案时。在Global.asax.cs文件中添加这部分代码。
protected void Application_Start()
{
...
SetupAutoFac();
...
}
private static void SetupAutoFac()
{
var builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
var container = builder.Setup();
var resolver = new AutofacWebApiDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = resolver;
}
在BLL层中创建这部分代码:
public static class AutoFacConfiguration
{
public static IContainer Setup(this ContainerBuilder builder)
{
REGISTER ALL YOUR SERVICES AND UOW HERE
return builder.Build();
}
}
在此之后,您可以将每个服务接口注入您的ApiControllers,而WebAPi只会引用您的BLL层或您放置所有接口的层。