zoukankan      html  css  js  c++  java
  • Caliburn笔记依赖注入容器(wpf框架)

    参考与此http://caliburn.codeplex.com/wikipage?title=Auto-Registering%20Components&referringTitle=Documentation

        此为基础,看了没用,不看不行…了解下注册流程.


    注册组件,差不多离不开这几种模式

    1. 手动注册
    2. 元数据标签注册
    3. 外部dll加载注册

    1.内置服务则用手动注册.

    2.挂元数据标签,如下

    [PerRequest(typeof(IHomePresenter))]
    public class HomePresenter : Presenter, IHomePresenter
    {
    }


    以前不是推荐此种做法的,标签会产生框架耦合,但框架用都用了,内置demo使用此方法最多,之前用的是手动注册,框架会去dll中寻找挂此标签的对象然后自动注册.

    3.外部dll加载

    重写CaliburnApplication的SelectAssemblies方法

    protected override System.Reflection.Assembly[] SelectAssemblies()
    {
        return new[] { Assembly.GetEntryAssembly(),typeof(Caliburn.WPF.ApplicationFramework.Bind).Assembly};
    }
    private void InspectAssembly(Assembly assembly, ICollection<ComponentInfo> componentList, ICollection<Type> configs)
    {
        var types = assembly.GetExportedTypes();
    
        foreach (var type in types)
        {
            foreach (var attribute in type.GetCustomAttributes(true).OfType<RegisterAttribute>())
                componentList.Add(attribute.GetComponentInfo(type));
        }
    
        foreach (var type in types)
        {
            if(_configType.IsAssignableFrom(type) && !type.IsAbstract)
                configs.Add(type);
        }
    }


    总的来说,我们只要加载dll,挂上标签就可以自动注册了

    内置服务+自定义服务注册好以后,接下来的任务就是注册实例.即组件的生命周期状况.内置都为Singleton

    /// <summary>
    /// The lifetime of a Caliburn component.
    /// </summary>
    public enum ComponentLifetime
    {
        /// <summary>
        /// One instance per application.
        /// </summary>
        Singleton,
        /// <summary>
        /// A new instance is created on each request.
        /// </summary>
        PerRequest,
        /// <summary>
        /// A new instance is created per custom lifetime rules.
        /// </summary>
        Custom
    }


    可以通过重写ConfigureWith方法,使用第三方容器来注册服务,当然其内置也提供了一个较为简单的容器

    新版本可能会更新,所以不去研究它了

  • 相关阅读:
    【裸机装系统】获取硬盘信息失败,请谨慎操作!
    【ORACLE】Win2008R2修改oracle数据库实例名
    【ORACLE】数据库空闲1分钟自动断开
    【ORACLE】oracle数据库用户密码复杂度配置
    【ORACLE】重写控制文件
    【ORACLE】oracle11g单实例安装
    【ORACLE】oracle打补丁
    【ORACLE】oracle11g dg搭建
    【ORACLE】oracle11g RAC搭建
    nginx负载均衡简单示例
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1635800.html
Copyright © 2011-2022 走看看