如何将特定于HTTP请求的对象注入到我提供的Unity对象中?

时间:2013-05-02 15:01:04

标签: asp.net-mvc asp.net-mvc-4 dependency-injection unity-container

例如,我将“当前用户”存储在Session中。业务层对象由Unity实例化。如何让业务层对象知道“当前用户”?

1 个答案:

答案 0 :(得分:13)

你应该隐藏"当前用户"抽象背后:

public interface ICurrentUser
{
    string Name { get; }
}

这个抽象应该在业务层中定义,您需要创建一个放在Composition Root中的ASP.NET特定实现:

public class AspNetCurrentUser : ICurrentUser
{
    public string Name
    {
        get { return HttpContext.Current.Session["user"]; }
    }
}

现在您的业务层对象可以依赖于ICurrentUser接口,在Unity中,您可以按如下方式注册实现:

container.RegisterType<ICurrentUser, AspNetCurrentUser>();