以下試してください:
public delegate IProduct ProductFactory(int id, DateTime manufacturedDate, DateTime expiryDate);
public interface IProduct { };
public class ConcreteProduct : IProduct
{
public int ProductId { get; set; }
public DateTime ManufactureDt { get; set; }
public DateTime ExpiryDt { get; set; }
public ConcreteProduct(int id, DateTime manufacturedDate, DateTime expiryDate)
{
ProductId = id;
ManufactureDt = manufacturedDate;
ExpiryDt = expiryDate;
}
}
//Class where Factory is injected
public class ProductOrder
{
private readonly ProductFactory _prodFactory;
public ProductOrder(ProductFactory prodFactory)
{
_prodFactory = prodFactory;
}
public IProduct GenerateOrder()
{
return _prodFactory.Invoke(10, DateTime.Now, DateTime.Now.AddDays(4));
}
}
Autofac登録:
static IContainer container;
private static void InitializeAutoFac()
{
var builder = new ContainerBuilder();
builder.Register<ProductFactory>(context =>
{
return (int id, DateTime dt, DateTime dt2) =>
{
IProduct prod = new ConcreteProduct(id, dt, dt2);
return prod;
};
}).SingleInstance();
builder.RegisterType<ProductOrder>().AsSelf();
container = builder.Build();
}
使用法:
static void Main()
{
InitializeAutoFac();
ProductOrder pOrder = container.Resolve<ProductOrder>();
IProduct prod = pOrder.GenerateOrder();
}
はそれがお役に立てば幸いです。
データオブジェクト(DTO、エンティティ、メッセージなど)を作成するのはオートファックの仕事ではありません。 DIコンテナの仕事は、アプリケーションコンポーネント(アプリケーションの動作を保持するクラス)のオブジェクトグラフを作成することです。 – Steven