.net - 是否有类似 Ninject 提供程序的 Autofac 提供程序?

标签 .net dependency-injection ninject autofac

我有一个问题,Autofac 的提供者是否像 Ninject 的提供者一样?
我的意思是,我可以在 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/

相关文章:

jquery - 响应式的光滑图像

c# - Selenium C# 的第二个测试方法失败

c# - 在 StartUp 中使用 Autofac 解决每个用户/每个请求的依赖

c# - Ninject 工厂 : Create the appropriate class based on a parameter

c# - 什么是神秘的ThreadSafeObjectProvider

.net - 如何通过通常的 System.IO 类访问网络驱动器?

vb.net - 依赖注入(inject) - 我不明白!

nhibernate - 使用 NHibernate 对象进行依赖注入(inject)

c# - 如何根据传递给 ASP.NET MVC 中的 Controller /操作的属性值有条件地绑定(bind)到 ninject?

c# - 使用 Ninject 绑定(bind) Controller 上下文