私は所有インスタンスについて再調査しており、設定する必要があります。 http://docs.autofac.org/en/latest/advanced/owned-instances.htmlautofacと所有インスタンス
この所有インスタンスを使用する同じクラスに2つのメソッドがあります。私はこのようにそれを設定している:
private readonly Func<SessionDetails, Owned<ITroposUnitOfWork>> _paramatizedTroposUnitOfWork;
作業クラスのコンストラクタの私のユニットは、次のようになります。だから、
/// <summary>
/// Used for creating manual sessions
/// </summary>
/// <param name="sessionDetails">The details of the session to be created</param>
public TroposUnitOfWork(SessionDetails sessionDetails)
{
// Throw if we don't supply any details
ThrowIf.ArgumentIsNull(() => sessionDetails);
// Start the session
StartSession(sessionDetails);
}
、私の理解は、ユニット、その後、私はブロックを使用してを使用した場合ということです仕事の終わりに処分されます。しかし、そうではありません。 前にも触れましたが、この所有インスタンスを使用する2つのメソッドがあります。
/// <summary>
/// Creates the Tropos user
/// </summary>
/// <param name="model">The user to be created</param>
/// <param name="password">The password to set</param>
private async Task CreateTroposUserAsync(User model, string password)
{
// If there is no password, throw an error
ThrowIf.ArgumentIsNull(() => password);
// Get our master user
var user = await base.FindByNameAsync(model.Master);
// If we have no master user, throw an error
if (user == null) throw new ObjectNotFoundException();
// Create our session details
var sessionDetails = _troposSession.Value.Create(user);
// User our new user
using (var troposUnitOfWork = _paramatizedTroposUnitOfWork(sessionDetails))
{
try
{
// Create our tropos user service
var userService = new TroposUserService(troposUnitOfWork.Value);
// Create our user
var transaction = userService.Create(model);
// Save our changes (Don't throw an error if the user already exists)
troposUnitOfWork.Value.RunTransaction(transaction);
} catch (Exception ex)
{
// Display human readable messages
throw new Exception(ex.Message);
}
}
// Sets the new users password
SetTroposPassword(model, password);
// Update the flag
model.HasTroposLogin = true;
}
他方はである:それらは
/// <summary>
/// Sets the tropos password
/// </summary>
/// <param name="model">The user that needs the password setting</param>
/// <param name="password"></param>
private void SetTroposPassword(User model, string password)
{
// Create our session details
var sessionDetails = _troposSession.Value.Create(model.UserName);
// Create our anonymous session
using (var troposUnitOfWork = _paramatizedTroposUnitOfWork(sessionDetails))
{
// Create our tropos user service
var userService = new TroposUserService(troposUnitOfWork.Value);
// Set our password
var transaction = userService.ChangePassword(password);
// Save our changes
troposUnitOfWork.Value.RunTransaction(transaction);
}
}
最初の方法は、第2のメソッドを呼び出すが、外ブロックを使用しません。私はTroposUnitOfWork disposeメソッドにブレークポイントを設定し、一度だけヒットします。コンストラクタも一度だけヒットします。 誰にも分かりますか?
でデコレータや工場を使用して同様の問題を解決してきました。どのクラスにCreateTroposUserAsyncメソッドがありますか?そのクラスの教師を見る必要があります。なぜあなたは新しいことをするのですか? –