我有一个问题,是否有类似 Ninject 的提供程序的 Autofac 提供程序?
我的意思是,我可以在 Autofac 中使用它吗?
Bind <ISessionFactory> ().ToProvider(new IntegrationTestSessionFactoryProvider());
最佳答案
我正在查看 Ninject 的 Providers and the Activation Context,似乎 Providers 是一个接口(interface)来处理 Autofac 只能使用 lambda 处理的场景。在 Ninject 的例子中,他们有:
Bind<IWeapon>().ToProvider(new SwordProvider());
abstract class SimpleProvider<T> {
// Simple implementations of the junk that you don't care about...
public object Create(IContext context) {
return CreateInstance(context);
}
protected abstract T CreateInstance(IContext context);
}
class SwordProvider : SimpleProvider<Sword> {
protected override Sword CreateInstance(IContext context) {
Sword sword = new Sword();
// Do some complex initialization here.
return sword;
}
}
与 Autofac 的委托(delegate)语法相比,所有这些似乎都有些疯狂:
builder.Register(context =>
{
Sword sword = new Sword();
// Do some complex initialization here.
return sword;
}).As<IWeapon>();
编辑:如果你的 init 足够复杂以保证它自己的类,你仍然可以这样做:
builder.RegisterType<SwordFactory>();
builder.Register(c => c.Resolve<SwordFactory>().Create()).As<IWeapon>();
// this class can be part of your model
public class SwordFactory
{
public Sword Create()
{
Sword sword = new Sword();
// Do some complex initialization here.
return sword;
}
}
这样做的好处是您仍然与 DI 框架分离。
关于.net - 是否有类似 Ninject 的提供程序的 Autofac 提供程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11549967/