我有 2 个控制器,它们都需要一个MySettings
代表一组设置的类型的对象。每个控制器都需要其自定义设置。为了在注册模块时做到这一点,我手动创建了 2 个设置对象并将它们都放入容器中。问题是如何指定每个控制器都应该注入其自己的 MySettings 类型的预定义自定义初始化实例?
更新:
现在有一个丑陋的解决方法,基本上使 Autofac 无用,因为所有解析都是手动完成的:
public class MyModule : Module {
protected override void Load(ContainerBuilder builder) {
builder.Register(context => {
var productControllerSettings = new MyListSettings(
pageSize: 20,
orderBy: "Name",
orderDirection: OrderDirection.Ascending
);
// and hell of other parameters that I need to resove
// by hands by doing context.Resolve<...> for each of them
var productController = new ProductController(
productControllerSettings
/*, the reset of parameters */
);
return productController;
});
builder.Register(context => {
var userControllerSettings = new MyListSettings {
pageSize: 20,
orderBy: "LastName",
orderDirection: OrderDirection.Ascending
};
var userController = new UserController(
userControllerSettings
/*, the rest of parameters resolved by calling context.Resolve<> by hands */
);
return userController;
});
}
}
我希望有更好的方法来做到这一点。
更新2:
解决这个不足的另一种方法是基于 MySettings 类创建 2 个新的设置类。这样每个实例唯一地对应一个类,Autofac 可以很容易地解析它。我不想仅仅为了让 Autofac 工作而做。