Unity Application Block を使用して依存関係をロードしています。すべての依存関係をロードすると、異常な動作をするという問題が発生します。
コンストラクター注入を使用してビジネス インターフェイスを使用するサービスがあり、そのビジネス インターフェイスはコンストラクター インジェクションとしてリポジトリ インターフェイスを使用します。私が抱えている問題は、データベースからユーザーの詳細をロードするときに、フィールド値が常に同じであることです (DB で手動で変更した後でも)。したがって、サービスを開くたびに同じインスタンス EntityFramework コンテキスト インスタンスを使用しているためだと思います。
Entity Framework に正しい詳細を読み込ませる唯一の方法は、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>