Unity DI注册实例未正确注入

时间:2015-05-14 13:34:45

标签: c# dependency-injection repository unity-container

我在解决统一实例方面遇到问题

我已经设置了这样的容器:

var token = new SecurityToken();
token.Token = "Test";
token.Value = "Test";

var passport = new PassportContext();
passport.Permissions = new SecurityPermissions { Add = true, Change = true, Inquiry = true, Delete = true };

_unityContainer = new UnityContainer();
_unityContainer.RegisterInstance<PassportContext>(passport, new ContainerControlledLifetimeManager());
_unityContainer.RegisterInstance<SecurityToken>(token, new ContainerControlledLifetimeManager());
_unityContainer.RegisterType<IWorksheetRepository, WorksheetRepository>();
存储库中的Web服务调用需要

PassportContextSecurityToken才能获取数据。

我解决了WorksheetRepository这样的问题:

UnityContainer.Resolve<IWorksheetRepository>();

实例化我的WorksheetRepository

public sealed class WorksheetRepository : IWorksheetRepository
{
    private PassportContext _passportContext;
    private SecurityToken _token;

    public WorksheetRepository(PassportContext passportContext, SecurityToken token)
    {
        _passportContext = passportContext;
        _token = token;
    }
}

现在,我的问题是,在WorksheetRepository构造函数中,PassportContextSecurityToken都已实例化,但所有属性都是默认值,而不是我在设置中设置的属性。我将它们设置为单身,所以当我解决IWorksheetRepository时,我的单身人员不应该被注入我的WorksheetRepository实施中吗?我在这里错过了一些团结的东西吗?

一些背景知识 - 我试图遵循最佳做法。我知道你的大多数应用程序应该不知道你的Unity容器,它应该从应用程序的根目录解决依赖关系。这是我试图遵循的模式,尽管这是一个单元测试。

1 个答案:

答案 0 :(得分:0)

看看这个例子,我在这里使用了InjectionProperty来提供实例。

public class SecurityPermissions
{
    public bool Add { get; set; }
    public bool Change { get; set; }
}

public class PassportContext
{
    public SecurityPermissions MyProperty { get; set; }
}

[TestMethod]
public void YourUnitTest()
{

using (var c = new UnityContainer())
{
    var sp = new SecurityPermissions() { Add = true, Change = true };

    c.RegisterType(typeof(PassportContext), new InjectionProperty("MyProperty", sp));
    var pc = c.Resolve<PassportContext>();