使用MS Unity错误"该类型没有可访问的构造函数。 "

时间:2014-06-04 02:39:45

标签: c# .net unity-container

使用MS Unity,我得到了#34; ICSService类型没有可访问的构造函数。 "运行时出错。

重要提示

  1. 接口ICSService和实现它的类在     两个单独的组件
  2. 在我的类实现中,我正在使用IUnitOfWork来自DAL的另一个接口 又是一个单独的组织。
  3. 这是我的合同:

    namespace Demo.CustomTypes
    {
        public interface ICSService
        {
            void AddClass(Class objClass);    
        }
    }
    

    以下是其实施:

    namespace Demo.Business
    {
        public class CSService : ICSService
        {
            private IUnitOfWork unitOfWork;
    
            public CSService ()
            {
                this.unitOfWork = new UnitOfWork();
            }
    
            public CSService (IUnitOfWork _unitOfWork)
            {
                this.unitOfWork = _unitOfWork;
            }
    
              public void AddClass(Class objClass)
        {
            unitOfWork.ClassRepository.Insert(objClass);
            unitOfWork.Save();
        }
    
        }
    }
    

    这是我的Bootstrappe类型注册码:

     public static void RegisterTypes(IUnityContainer container)
        {
    
    
            container.RegisterTypes(
    
               AllClasses.FromAssembliesInBasePath(),
    
               WithMappings.FromMatchingInterface,
    
               WithName.TypeName,
    
               WithLifetime.ContainerControlled);
    
        }
    

    修改 如果我将我的bootstraper代码修改为下面的代码它工作正常,但问题是它为什么不在类型的automatica grestration中工作。我怎样才能使它与自动类型一起工作?我不能使用以下方法,因为这样我将不得不手动完成这些工作。请帮助如何使用上面提到的自动配置方式。

     public static void RegisterTypes(IUnityContainer container)
        {
    
            container.RegisterType<ICSService, CSService>();
            container.RegisterType<IUnitOfWork, UnitOfWork>();    
        }
    

1 个答案:

答案 0 :(得分:-1)

有一种方法可以自动注册依赖项。以下链接可以帮助您实现相同的目标

我可以理解你的接口来自各个不同的领域,但我认为只要我们坚持为类和接口进行相同的命名转换(如名称类Test和接口ITest的名称),我们就可以有正确的依赖。