2012-07-18 66 views
0

在Autofac注册我的类型时遇到一些问题。Autofac - Resolve从泛型派生的类

我有以下设置基于另一个堆栈溢出帖子。 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类的函数功能构造的一切。我得到的错误是

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

任何人都可以在正确的方向指向我吗?

回答