C# 如何使用Unity容器解析Web API中依赖项的依赖项?

C# 如何使用Unity容器解析Web API中依赖项的依赖项?,c#,asp.net-web-api,unity-container,C#,Asp.net Web Api,Unity Container,我有一个web API控制器,我使用Unity.WebAPI来解决依赖关系。 下面是我的Bootstrapper.cs代码 public static class Bootstrapper { /// <summary> /// Public method to initialise UnityContainer. /// </summary> public static void Initialise() { va

我有一个web API控制器,我使用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也依赖于任何其他类,比如Employee,并且需要一个新的Employee()实例,而不需要UserService实例。 如何在UserService中解析这个新Employee()类的依赖关系。 还要注意Employee类没有实现任何接口


请回答,或让我知道如果任何进一步的澄清是必要的。我希望我问得很清楚。

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

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

通常,您的合成根目录是在启动时创建的,之后不能(不应该)更改


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

您只需在
BuildUnityContainer
方法中注册所需的类型映射即可


有关如何使用factory方法或注册实例,请参阅unity文档。

请建议必须编写哪些代码以及在何处编写代码?有关注册类型映射和如何注册实例,请参阅不要被Employee类的名称混淆,它可以是任何类XYZ。我想要的是,当我的UserService被实例化时,我想要UserService所依赖的那个XYZ类也被实例化。在哪里以及如何编写代码?你必须在容器中注册它,就像你在
IUserService
注册时一样。
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;

}