***求助,请教如何实现属性注入?

sweetzhf 2017-04-01 11:40:46
我想实现属性注入,请教属性注入的范例,我的用途是 我的一个类要用到另外一个接口类,但是要求不能通过构造函数注入,只能通过属性注入。
...全文
246 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuggzu 2017-04-01
  • 打赏
  • 举报
回复
没有无参数构造函数,若又不能添加个无参数构造函数,那实例化只能使用有参数的。
正怒月神 2017-04-01
  • 打赏
  • 举报
回复
引用 5 楼 sweetzhf 的回复:
但是提示B类必须有无参的构造函数,但是B类的构造函数又是有参数的,请教哪位大侠能够指点迷津?
给B类增加一个无参构造函数 public B(){}
sweetzhf 2017-04-01
  • 打赏
  • 举报
回复
我是一个A类想调用另外一个B类,B类带构造函数而且有参数,A类调用B类的时候,在A类里不能用构造函数注入,构造函数必须是无参的,所以考虑想用属性注入的办法把B类注入进来。 用了网上的属性注入方法:http://blog.csdn.net/zhgl7688/article/details/52005954 但是提示B类必须有无参的构造函数,但是B类的构造函数又是有参数的,请教哪位大侠能够指点迷津?
xuzuning 2017-04-01
  • 打赏
  • 举报
回复
搜索了一圈,看了不少相关的文章 发现他们都是抄来抄去的,谁也没把 属性注入 到底是什么说清楚
Forty2 2017-04-01
  • 打赏
  • 举报
回复
一般的Ioc库都支持属性注入,比如你可以用MEF,或AutoFac等。 不用Ioc库,则更简单,自己写个属性赋值就可以了。
class IMy
{
    public ILogger Logger {get;set;}
}
Test()
{
   IMy my = ...
   my.Logger = new ConsoleLogger();  // 属性注入
}
xuggzu 2017-04-01
  • 打赏
  • 举报
回复
楼主的名词看不懂,不过可能是一个意思:自己的类A要调用类B的函数,需要先实例化B,并传参数过去,但不能用构造传。不知道理解的对不对?
crystal_lz 2017-04-01
  • 打赏
  • 举报
回复
那么 注入 是啥意思?。。
江南小鱼 2017-04-01
  • 打赏
  • 举报
回复
中间讨论的没去看,单看撸主的首贴,一个类(A)调用另外一个类(B),在调用前实例化B呗。
sweetzhf 2017-04-01
  • 打赏
  • 举报
回复
是的,我也发现链接的意义不大,现在就是不知道Activator该如何传入B类的构造函数的参数?请给个指点? 不能再A类的构造函数中注入,只能在A类中通过Activator来传B类的构造函数参数,该怎么写呢?
Poopaye 2017-04-01
  • 打赏
  • 举报
回复
引用 5 楼 sweetzhf 的回复:
我是一个A类想调用另外一个B类,B类带构造函数而且有参数,A类调用B类的时候,在A类里不能用构造函数注入,构造函数必须是无参的,所以考虑想用属性注入的办法把B类注入进来。 用了网上的属性注入方法:http://blog.csdn.net/zhgl7688/article/details/52005954 但是提示B类必须有无参的构造函数,但是B类的构造函数又是有参数的,请教哪位大侠能够指点迷津?
我学了多年c#,从没听说过什么属性注入,构造函数注入之类的词 连接里的例子顶多叫反射,而且没看出来究竟有什么意义(如果能获取到TimeProvider根本没必要反射) 如果你只是想通过Activator创建一个对象,Activator是可以传入构造函数参数的
sweetzhf 2017-04-01
  • 打赏
  • 举报
回复
B类:
    public class InstanceRepository: RepositoryBase<Instance,long>, IInstanceRepository
    {
        public InstanceRepository(IDbContextProvider<DbContext> dbContextProvider) : base(dbContextProvider)
        {
        }

        public async Task<IQueryable<Instance>> GetInstanceAndUserAndCategoryAndDetailsAsync()
        {
            return await Task.Run(() => GetAll().Include("User").Include("Category").Include("InstanceDetails"));
        }
    }
A类:
    public class MainNotify : Registry
    {
       
        public MainNotify()
        {
            Schedule(() =>
            {
               
                   //这里如何调用A类的方法?

            }).ToRunEvery(30).Seconds();
        }
    }
  • 打赏
  • 举报
回复
这不改那不能动,直接用弄个工厂不也可以么,还不用这么纠结

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧