Unity DI注册实例没有正确注入

本文关键字:注入 DI 注册 实例 Unity | 更新日期: 2023-09-27 17:49:15

我在unity中解决实例的问题

我已经这样设置了容器:

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>();

PassportContextSecurityToken是存储库中web服务调用获取数据所必需的。

我像这样解决我的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容器,它应该从应用程序的根解决依赖关系。这是我试图遵循的模式,尽管这是一个单元测试。

Unity DI注册实例没有正确注入

看一下这个例子,我在这里使用了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>();