gpt4 book ai didi

c# - OWIN 能否替代 ASP.NET MVC 应用程序中的 DI?

转载 作者:太空狗 更新时间:2023-10-30 00:51:29 25 4
gpt4 key购买 nike

大约一年前,在 Visual Studio 中创建时自动生成的 MVC 项目不包含任何关于 OWIN 的内容。作为重新申请的人,想了解变化,想知道OWIN能不能代替我的DI。

据我了解,Startup.Auth.cs 中的以下内容集中了用户管理器(处理身份)的创建以及应用程序数据库连接的创建。

public partial class Startup
{
// For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
public void ConfigureAuth(IAppBuilder app)
{
// Configure the db context and user manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

// Other things...
}
}

来自一个非常有用的来源:http://blogs.msdn.com/b/webdev/archive/2014/02/12/per-request-lifetime-management-for-usermanager-class-in-asp-net-identity.aspx , 看起来好像我们可以随时使用如下代码访问用户管理器或 dbcontext

public class AccountController : Controller
{
private ApplicationUserManager _userManager;

public AccountController() { }

public AccountController(ApplicationUserManager userManager)
{
UserManager = userManager;
}

public ApplicationUserManager UserManager {
get
{
// HttpContext.GetOwinContext().Get<ApplicationDbContext>(); // The ApplicationDbContextis retrieved like so
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}

// Other things...
}

如果我理解正确,从使用 StructureMap 转移到 OWIN(处理 DI)我所能做的只是像上面的 AccountController 一样构造我的 Controller 。我的应用程序中是否缺少任何内容或我是否仍需要 DI/OWIN 是否提供 DI?

最佳答案

我个人不喜欢使用 OWIN 解决依赖关系的想法。

AccountController.UserManager(以及其他一些AccountManager 属性)的默认实现演示了 service locator as an anti-pattern 的示例.所以我更愿意删除所有这些东西并遵循 DI 原则。 This blog post展示了如何重构默认项目模板以遵循这些原则。

我希望在下一版本的 ASP.NET 中改进依赖注入(inject)。他们实际上promised开箱即用的依赖注入(inject)支持。

关于c# - OWIN 能否替代 ASP.NET MVC 应用程序中的 DI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27085235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com