IDisposable
実装で構成されるコンソール アプリケーションで Unity 2.1.505.0 を使用していますCarRepository
。ただし、Dispose()
スコープ外の場合は決して呼び出されません。以下はコードサンプルです。
internal class Program
{
private static void Main(string[] args)
{
CarShop.Entry();
}
}
class CarShop
{
static UnityContainer unityContainer = new UnityContainer();
public static void Entry()
{
unityContainer.RegisterType<ICarRepository, CarRepository>();
var carShop = new CarShop();
carShop.BuyCar();
}
public void BuyCar()
{
CheckCar();
}
private void CheckCar()
{
var carService = unityContainer.Resolve<CarService>();
var car = carService.GetCar(1);
// **Dispose() method is not called out of this scope**
}
}
class CarService
{
private ICarRepository carRepository;
public CarService(ICarRepository carRepository)
{
this.carRepository = carRepository;
}
public Car GetCar(int id)
{
return this.carRepository.GetCar(id);
}
}
interface ICarRepository
{
Car GetCar(int id);
}
class CarRepository : ICarRepository, IDisposable
{
public Car GetCar(int id)
{
return null;
}
public void Dispose()
{
}
}
public class Car
{
}
何か案が??
アップデート
@nemesvが以下の解決策を示唆しているように:
unityContainer.RegisterType<ICarRepository, CarRepository>(
new HierarchicalLifetimeManager())
using (var childContainer = unityContainer.CreateChildContainer())
{
var carService = childContainer.Resolve<CarService>();
var car = carService.GetCar(1);
}
できます。ただし、 とは異なりUnity.MVC
、明示的に を作成する必要がありchildContainer
ます。IDispose
Unity.MVCのように、オブジェクトを破棄する透過的な方法はありますか。または将来の他のツール。