• 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方法,使用第三方容器来注册服务,当然其内置也提供了一个较为简单的容器

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

  • 相关阅读:
    QueryString传值的加密与解密方法 .
    正則表達式
    下載模板
    SQL使用存儲過程訪問不同服務器
    asp.net 操作INI文件的读写,读写操作本地ini配置文件
    JS 頁面實時更新時間
    JS 定時刷新父類頁面
    Domino Web中隐藏附件选择框
    Domino移动Web上传的附件到RichText域
    Request的属性和防止图片被盗链
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1635800.html
Copyright © 2020-2023  润新知