Autofac - 从Generic派生的Resolve类

时间:2012-07-18 21:22:00

标签: autofac

在让Autofac注册我的类型时遇到一些问题。

我根据另一个堆栈溢出帖子进行了以下设置。 Validation: How to inject A Model State wrapper with Ninject?

我的设置如下

public interface IValidator : IDependancy

public abstract class Validator<T> : IValidator

public class UserValidator : Validator<AccountModel>

sealed class ValidationProvider : IValidationProvider
{
    private readonly Func<Type, IValidator> _validatorFactory;

    public ValidationProvider(Func<Type, IValidator> validatorFactory)
    {
        _validatorFactory = validatorFactory;
    }
...

我的Autofac配置

builder.RegisterType(typeof (ValidationProvider)).As<IValidationProvider>();

builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
       .Where(t => t.BaseType==(typeof(Validator<>))).InstancePerDependency()
       .As<IValidator>();

builder.Register<Func<Type, IValidator>>(c =>
{
      var cc = c.Resolve<IComponentContext>();
      return type =>
      {
          var valType = typeof(Validator<>).MakeGenericType(type);
          return (IValidator) cc.Resolve(valType);   // failing here
      }; 
 });

我可以解析除ValidationProvider类中的Func构造函数之外的所有内容。我得到的错误是

请求的服务'Sw.Web.Validation.Validator`1 [[SweepHelper.Web.Models.AccountModel,Sw.Web,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]'尚未注册。

有人能指出我在正确的方向吗?

1 个答案:

答案 0 :(得分:0)

您使用AppDomain.CurrentDomain.GetAssemblies()会让我觉得它可能与此问题的问题相同:Autofac Losing Registrations on Web.Config Edit