2012-07-18 108 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]]'尚未註冊。

任何人都可以在正確的方向指向我嗎?

回答