gpt4 book ai didi

c# - 如何使用 Unity 容器解决 Web API 中的依赖关系?

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:43 25 4
gpt4 key购买 nike

我有一个 Web API Controller ,我正在使用 Unity.WebAPI 来解决依赖关系。以下是我的 Bootstrapper.cs 代码,

public static class Bootstrapper
{
/// <summary>
/// Public method to initialise UnityContainer.
/// </summary>
public static void Initialise()
{
var container = BuildUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
// register dependency resolver for WebAPI RC
GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
}

/// <summary>
/// Register built in types.
/// </summary>
/// <returns></returns>
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
container.RegisterType<IUserService, UserService>().RegisterType<UnitOfWork>(new HierarchicalLifetimeManager());

return container;
}
}

这将我的 UserService 解析为我的 UsersController ,我的 Controller 代码是,

private readonly IUserService _userService;




/// &lt;summary&gt;
/// Public constructor to initialize user service instance
/// &lt;/summary&gt;
/// &lt;param name=&quot;userService&quot;&gt;&lt;/param&gt;
/// &lt;param name=&quot;tokenService&quot;&gt; &lt;/param&gt;
public UsersController(IUserService userService)
{
_userService = userService;

}

现在假设我的 UserService 也依赖于任何其他类,比如 Employee 并且在需要 UserService 实例时需要一个新的 Employee() 实例。我如何解决我的 UserService 中这个新的 Employee() 类的依赖关系。另请注意,Employee 类不实现任何接口(interface)。

请回答,或让我知道是否需要进一步说明。我希望我问的问题很清楚。

最佳答案

你的依赖注入(inject)器可以(应该)只注入(inject)行为类(服务、处理程序、管理器等),它不能(不应该)注入(inject)数据持有者类(实体、poco 等)。因此,您必须稍微更改您的设计,以便可以将 Employee 实例提供给您的 IUserService

例如,您的 IUserService 可以依赖于可以注入(inject)的 IEmployeeProvider。您的员工提供者可以从您存储它的任何地方(数据库、 session )加载/检索要注入(inject)的员工。这完全取决于您的应用程序决定使用哪个员工的位置。

通常你的合成根是在启动时创建的,之后不能(不应该)改变。

您的 UsersController 是由 DependencyResolver 直接创建的,此时您的员工还未知。

关于c# - 如何使用 Unity 容器解决 Web API 中的依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26382978/

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