我正在使用 Unity Application Block 加载我的依赖项,我遇到的一个问题是,当我的所有依赖项都加载时,它的行为异常。
我有一个使用构造函数注入采用业务接口的服务,并且该业务接口采用存储库接口作为构造函数注入。我遇到的问题是,当我从数据库加载用户详细信息时,字段值总是相同的(即使我在数据库中手动更改了它们)。因此我认为这是因为每次打开服务时它都使用相同的实例 EntityFramework 上下文实例。
我可以让实体框架加载正确详细信息的唯一方法是回收 IIS。
有没有一种方法可以强制 Unity 为其依赖项创建新的对象实例,并在 WCF 请求完成时强制它们被释放?我曾尝试使用瞬态生命周期管理器,但这并不能解决问题。
代码:
public class UserService : IUserService
{
private IUserAdmin _UserBusiness { get; set; }
public UserService()
{
}
[InjectionConstructor]
public UserService(IUserAdmin userBusiness)
: this()
{
this._UserBusiness = userBusiness;
}
}
public class UserAdmin : BusinessBase, IUserAdmin
{
private IRepository<DBUserAccount> _UserRepository { get; set; }
[InjectionConstructor]
public UserAdmin(IRepository<DBUserAccount> userRepository)
{
this._UserRepository = userRepository;
}
}
public class GenericRepository<T> : IDisposable, IRepository<T> where T : class, new()
{
private Entities _Context;
private ObjectSet<T> _ObjectSet;
public GenericRepository()
{
this._Context = new Entities();
this._ObjectSet = this._Context.CreateObjectSet<T>();
}
}
统一配置:
<register type="Services.Contracts.IUserService, Server.Services, Version=1.0.0.0, Culture=neutral, PublicKeyToken= 683f160d975782be"
mapTo="Services.Implementations.UserService, Server.Services, Version=1.0.0.0, Culture=neutral, PublicKeyToken= 683f160d975782be">
<lifetime type="transient"/>
</register>
<register type="Server.Business.Users.IUserAdmin, Server.Business, Version=1.0.0.0, Culture=neutral, PublicKeyToken= 683f160d975782be"
mapTo="Server.Business.Users.UserAdmin, Server.Business, Version=1.0.0.0, Culture=neutral, PublicKeyToken= 683f160d975782be">
<lifetime type="transient"/>
</register>
<register type="Server.DataLogic.IRepository`1[[Server.DataModels.DBUserAccount, Server.DataModels, Version=1.0.0.0, Culture=neutral, PublicKeyToken= 683f160d975782be]], Server.DataLogic, Version=1.0.0.0, Culture=neutral, PublicKeyToken= 683f160d975782be"
mapTo="Server.DataLogic.GenericRepository`1[[Server.DataModels.DBUserAccount, Server.DataModels, Version=1.0.0.0, Culture=neutral, PublicKeyToken= 683f160d975782be]], Server.DataLogic, Version=1.0.0.0, Culture=neutral, PublicKeyToken= 683f160d975782be">
<lifetime type="transient"/>
</register>