我在解决统一实例方面遇到问题
我已经设置了这样的容器:
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服务调用需要 PassportContext
和SecurityToken
才能获取数据。
我解决了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
构造函数中,PassportContext
和SecurityToken
都已实例化,但所有属性都是默认值,而不是我在设置中设置的属性。我将它们设置为单身,所以当我解决IWorksheetRepository
时,我的单身人员不应该被注入我的WorksheetRepository
实施中吗?我在这里错过了一些团结的东西吗?
一些背景知识 - 我试图遵循最佳做法。我知道你的大多数应用程序应该不知道你的Unity容器,它应该从应用程序的根目录解决依赖关系。这是我试图遵循的模式,尽管这是一个单元测试。
答案 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>();